我遇到这样一种情况,即能够从一组32个锁中原子地获得多个锁(可能是一次一个),并且可能用32位共享原子替换离散锁。单词,通过原子操纵,获得一次锁定多个的能力,而无需复杂,容易出错且昂贵的锁定顺序协议。 (Linux FUTEX_WAIT_BITSET
和FUTEX_WAKE_BITSET
在这里也很有用。)
这是否有意义,是否存在我应该担心的性能缺陷?从概念上讲,我认为共享锁定字应具有更高的同步成本,因为它上面的原子必须使内存与任何锁下的其他线程所做的更改同步,而不仅仅是所采用的特定锁(位)。但是,除非离散锁具有真实的,完整的获取/释放语义,否则这似乎也是纯粹的理论差异;如果他们只使用不会将内存同步与特定锁定地址联系起来的常规障碍来实现,那么同步成本应该是相同的。
这种分析是否正确?还有其他原因我应该谨慎地将多个锁定位放在一个原子字中吗?