标签:大小 频繁 状态 question stack 个数 实现 不用 flow
如果有很多线程频繁的访问这些数据,那么多个锁,可以增加并行性。不过锁太多不太好维护,损失了代码的可维护性。
那点汇编指令对性能的影响微乎其微,性能影响的大头是内存/缓存的一致性保证(memory/cache coherency guarantees). 所以锁操作越少越好。
互斥量主要有两部分组成 (简化后):
标记状态的改变,就几条指令,一般不会有syscall.
如果试图获取一个已经锁住的锁,那么调用线程会被添加到等待队列里面,开始等待。这个操作需要通过系统调用来实现。
解锁时,如果等待队列为空,那么什么都不用干,不影响性能;如果队列不为空,那么需要唤醒一个等待的线程,这个操作也需要通过系统调用来实现。
系统调用,一般比较耗性能,不过有的平台可能有做优化,也会非常快。
锁住一个未锁的锁很cheap,打开一个锁时,如果等待队列为空,也很cheap。
可以像int一样使用,限制互斥量数量的是你的程序可以申请的内存大小。
所以要具体问题具体对待
标签:大小 频繁 状态 question stack 个数 实现 不用 flow
原文地址:https://www.cnblogs.com/ConfuciusPei/p/12359126.html