一般进程间互斥都是用信号量之类的,但信号量资源有限制,而且速度也不佳.
有的时候用共享内存作为锁介质,使用原子比较替换的方式,速度快,又没有限制.
但共享内存有个坏处,进程退出时不会自动释放锁资源.
原子比较替换时应该替换为进程ID, 其他进程加锁时可以判断加锁进程是否存在,
如果不存在则替换为本进程ID.
AIX下的实现:
int lock(int* lockv)
{
while(1)
{
if(*lockv == 0)
{
if(check_lock(*lockv, 0, getpid()) == 0)
{
return 0;
}
}
else
{
int tmp = *lockv;
kill(tmp, 0);
if(errno == ESRCH)
{
if(check_lock(*lockv, tmp, getpid()) == 0)
{
return 0;
}
}
usleep(10);
}
}
posted on 2008-07-15 21:23
merlinfang 阅读(1461)
评论(3) 编辑 收藏 引用