【发布时间】:2012-06-05 17:08:01
【问题描述】:
我正在尝试从here 实现 Michael-Scott FIFO 队列。我无法为 ABA 问题实施他们的解决方案。我收到此错误。
error: incompatible type for argument 1 of '__sync_val_compare_and_swap'
作为参考,我正在使用 linux 机器在英特尔架构上编译它。如果您需要有关我的设置的更多信息,请询问。
似乎sync_val_CAS 最多只能处理 32 位值。因此,当我删除他们用于消除 ABA 问题的计数器时,一切都编译并运行良好。
有人知道我应该在这里使用的相关 64 位 CAS 指令吗?
还有一个问题,是否有更好(更快)的无锁 fifo 队列实现?我遇到了 Nir Shavit 等人的 this,这似乎很有趣。我想知道其他人是否看到过类似的努力?谢谢。
【问题讨论】:
-
解决方案 ABA 产生解决方案 CDC 或解决方案 BEB
-
您使用哪种语言? C?
-
请参阅stackoverflow.com/questions/38984153/…,了解具有比较交换更新但仅有效加载指针(使用联合)的 C++11 指针 + ABA-counter 结构。
标签: linux concurrency intel fifo lock-free