问题提出:
在并发访问的时候,允许并发访问函数A,但是当访问函数A时不允许访问函数B,同样访问函数B时不能函数A,即两个函数之间是互斥的.如何才能获得访问A时的最大性能呢?
解决方案(1):
假设多进程环境下,一般选用PID作为可重入的重要条件,传统实现如下:
void lockpid(lock* p)
{
if(p->pid == getpid())
return;
else
{
p->lock();
}
}
本题解决也是借鉴如此,使用整数 lockv = 0;作为两函数互斥的根本,当lockv>0时表示正在访问函数A,<0时表示正在访问函数B.具体实现如下:
函数A()
{
//临界区
{
while(lockv < 0)
usleep(1);
++lockv;
}
//do something ...
//临界区
{
--lockv;
}
}
函数B()
{
//临界区
{
while(lockv > 0)
usleep(1);
--lockv;
}
//do something ...
//临界区
{
++lockv;
}
}
缺点很明显的,虽然在临界区里面只有几个机器指令,但并不能获得最大的性能.如何优化才能获得函数A的最大性能呢?
posted on 2006-11-18 11:44
merlinfang 阅读(330)
评论(0) 编辑 收藏 引用