在多进程通讯中。使用比较多的是互斥量。
关于互斥量的介绍在网上有很多的资料这里就不多说。这里只是谈谈在使用互斥量中的遇到的几个问题。
当多个进程对同一个硬件访问操作时要使用互斥量进行锁定。笔者用的是某据说是很好的软件狗进行开发。
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秒。可见对于运算时间长的计算是否用软件锁一定要好好衡量。