一般進程間互斥都是用信號量之類的,但信號量資源有限制,而且速度也不佳.
有的時候用共享內存作為鎖介質,使用原子比較替換的方式,速度快,又沒有限制.
但共享內存有個壞處,進程退出時不會自動釋放鎖資源.
原子比較替換時應該替換為進程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 閱讀(1469)
評論(3) 編輯 收藏 引用