首页 > 解决方案 > 共享锁字中的离散锁与锁位

问题描述

我有一种情况,能够从一组 32 个锁中以原子方式获取多个锁(可能同时获得多个锁)会很有用,并且可能会用 32 位共享原子字替换离散锁,操作通过原子,获得一次锁定多个锁定的能力,而无需复杂、容易出错且成本高昂的锁定顺序协议。(Linux在这里FUTEX_WAIT_BITSETFUTEX_WAKE_BITSET非常有用。)

这是否有意义,是否存在我应该担心的性能缺陷?从概念上讲,我认为共享锁字应该有更高的同步成本,因为它上的原子必须使内存与其他线程在任何锁下所做的更改同步,而不仅仅是正在使用的特定锁(位)。但是,除非离散锁具有真实的、完整的获取/释放语义,否则这似乎也可能是纯粹的理论差异;如果它们只是使用不将内存同步绑定到特定锁地址的常规屏障来实现,则同步成本应该是相同的。

这个分析正确吗?是否有其他原因我应该谨慎将多个锁定位放在一个原子字中?

标签: cmultithreadinglockingatomic

解决方案


推荐阅读