日期:2014-05-16  浏览次数:20577 次

互斥量问题
在看unix环境高级编程,书上有句话不理解如下:

互斥量本质上说是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量量上的锁。

我想问:这里的共享资源是所有的共享资源吗?如果是的话,那为什么书上会出现使用两个互斥量的例子,我觉得如果锁住的是所有 共享资源的话,那么只要一个互斥量就足够了。 如果不是的话,那么互斥量保护的资源的范围是如何确定的?。。。求大神,我的理解错在哪里了。。。。。?

------解决方案--------------------
锁的粒度要小,否则影响效率,所以有时需要多个锁。

比如说,你会在不同的地方(不是同时)修改全部变量A和B,则最好用两个锁,如果用一个的话,当一个线程正在修改A的时候,其它线程连B都修改不了。
------解决方案--------------------
如果锁的粒度太粗,就会出现很多线程阻塞等待相同的锁,原子并发性的改善微乎其微。如果锁的粒度太细,那么过多的锁开销会使系统性能受到影响,而且代码变得相当复杂。
具体请看《APUE》P305