我正在尝试从 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/