c - 共享锁字中的离散锁与锁位
问题描述
我有一种情况,能够从一组 32 个锁中以原子方式获取多个锁(可能同时获得多个锁)会很有用,并且可能会用 32 位共享原子字替换离散锁,操作通过原子,获得一次锁定多个锁定的能力,而无需复杂、容易出错且成本高昂的锁定顺序协议。(Linux在这里FUTEX_WAIT_BITSET
也FUTEX_WAKE_BITSET
非常有用。)
这是否有意义,是否存在我应该担心的性能缺陷?从概念上讲,我认为共享锁字应该有更高的同步成本,因为它上的原子必须使内存与其他线程在任何锁下所做的更改同步,而不仅仅是正在使用的特定锁(位)。但是,除非离散锁具有真实的、完整的获取/释放语义,否则这似乎也可能是纯粹的理论差异;如果它们只是使用不将内存同步绑定到特定锁地址的常规屏障来实现,则同步成本应该是相同的。
这个分析正确吗?是否有其他原因我应该谨慎将多个锁定位放在一个原子字中?
解决方案
推荐阅读
- javascript - 如何知道任何网站使用的时区?
- java - IntelliJ IDEA NoClassDefFoundError - AbstractExpectedPatterns
- git - 如何将项目从 Eclipse 推送到 GitHub
- javascript - 图表看起来只有灰色,不显示颜色 - Chartjs,discordjs
- reactjs - reactjs if jsx里面的条件
- flutter - 如何在 Flutter for-in 循环中解析未定义名称“货币”?
- shopify - 如给定图像所示,如何在 shopify 管理订单中显示其他详细信息?
- api - 文档中的 Airflow api 身份验证示例给了我一个 401
- javascript - 正确跟踪 vue-multiselect 中的选项
- python - 使用 matplotlib 增加 x 和 y 值