随笔 - 79  文章 - 58  trackbacks - 0
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(9)

随笔分类

随笔档案

文章档案

相册

搜索

  •  

积分与排名

  • 积分 - 294189
  • 排名 - 87

最新评论

阅读排行榜

评论排行榜

问题提出:
        在并发访问的时候,允许并发访问函数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 阅读(330) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理