蓝色理想

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  37 Posts :: 1 Stories :: 28 Comments :: 0 Trackbacks
一般进程间互斥都是用信号量之类的,但信号量资源有限制,而且速度也不佳.

有的时候用共享内存作为锁介质,使用原子比较替换的方式,速度快,又没有限制.

但共享内存有个坏处,进程退出时不会自动释放锁资源.

原子比较替换时应该替换为进程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 阅读(1032) 评论(3)  编辑 收藏 引用

Feedback

# re: 原子比较替换锁 2008-07-16 03:03 放屁阿狗
进程间互斥的方法太多了flock,socket ,ipcmsg.....  回复  更多评论
  

# re: 原子比较替换锁[未登录] 2008-07-16 09:36 raof01
还有内核里的spinlock  回复  更多评论
  

# re: 原子比较替换锁[未登录] 2008-07-16 09:51 ViskerWong
spinlock太重量级了,不在非必要的情况下尽量少用
Vista已经开始减少spinlock的使用量了  回复  更多评论
  


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
相关链接:
网站导航: