蓝色理想

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  37 Posts :: 1 Stories :: 28 Comments :: 0 Trackbacks
问题提出:
        在并发访问的时候,允许并发访问函数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 阅读(23) 评论(0)  编辑 收藏 引用

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

相关链接:
网站导航: