一般進(jìn)程間互斥都是用信號(hào)量之類的,但信號(hào)量資源有限制,而且速度也不佳.
有的時(shí)候用共享內(nèi)存作為鎖介質(zhì),使用原子比較替換的方式,速度快,又沒有限制.
但共享內(nèi)存有個(gè)壞處,進(jìn)程退出時(shí)不會(huì)自動(dòng)釋放鎖資源.
原子比較替換時(shí)應(yīng)該替換為進(jìn)程ID, 其他進(jìn)程加鎖時(shí)可以判斷加鎖進(jìn)程是否存在,
如果不存在則替換為本進(jìn)程ID.
AIX下的實(shí)現(xiàn):
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)
評(píng)論(3) 編輯 收藏 引用