linux - 如何实现 ABA 解决方案?

标签 linux concurrency intel fifo lock-free

我正在尝试从 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 队列实现?我遇到了this由 Nir ​​Shavit 等人撰写,这似乎很有趣。我想知道其他人是否也看到过类似的努力?谢谢。

最佳答案

假设使用 gcc,尝试使用“march”开关。像这样的东西:-march=i686

还有 __sync_bool_compare_and_swap。不知道是不是更快。

关于linux - 如何实现 ABA 解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10901680/

相关文章:

java - 如何调用 Linux shell 并为其设置 PATH?

linux - 使用 sed 替换字符串的一部分

linux - 移动文件并将它们放入相应的文本文件文件夹中

C++ 内联汇编(英特尔编译器): LEA and MOV behaving differently in Windows and Linux

python - 将 Cython 与英特尔编译器和 OpenMP 结合使用

linux - 调试输出未正确显示

java - 多核与单处理器中的 volatile 关键字?

java - 不调用进入 future 名单

grails - Grails Executor 插件出错,未找到 bean "persistenceInterceptor"

windows - 写入 CPU 寄存器实际上是如何工作的?