现在的位置: 首页 > 综合 > 正文

互斥量的使用感受

2013年07月24日 ⁄ 综合 ⁄ 共 524字 ⁄ 字号 评论关闭

在多进程通讯中。使用比较多的是互斥量。

关于互斥量的介绍在网上有很多的资料这里就不多说。这里只是谈谈在使用互斥量中的遇到的几个问题。

当多个进程对同一个硬件访问操作时要使用互斥量进行锁定。笔者用的是某据说是很好的软件狗进行开发。

1:使用CSingleLock时很方便,当发现在查询硬件的时候 

如下的使用时:mm为互斥量

 

int num =0;

CSingleLock singlelock(&mm);

 

singlelock.Lock();

if(singlelock.IsLocked())

{

num = dDIC_Find();//查找到有效硬件接口的个数。

singlelock.Unlock();

}

 

 

 

这时当打开两个访问同一个软件锁的进程时,返回 num=89999;

但实际上只有一个软件锁。

 

修改为

int num;

 

mm.Lock();

{

num = dDIC_Find();

}

mm.Unlock();

 

 

则返回值正确。

 

2:关于效率互斥量的使用粒度要好好推敲,过大的可能造成死锁。过小的粒度又会影响执行速度。

 

笔者初步测试。未添加软件锁判断时单个进程运行一个计算用59秒,添加软件锁的判断后,运行时间增加了6-7秒。可见对于运算时间长的计算是否用软件锁一定要好好衡量。

抱歉!评论已关闭.