【发布时间】:2012-06-30 01:22:14
【问题描述】:
我在多处理器系统上的共享内存 x 中有一个变量。
void MyFunction(volatile int* x) {
if (*x != 0) {
// do something
}
}
其他进程(可能在不同的处理器上)将使用 gcc 内置原子操作(例如 __sync_bool_compare_and_swap 等)写入 x。
我想我遇到了一些缓存并发问题,有时需要一些时间才能最终用新值更新 x。
我想要的是一种 atomic_compare (没有交换),如果这样的东西存在的话?或“原子读取”。最快的方法是什么? (避免互斥体、锁等)
谢谢
编辑:
我刚刚意识到一个有点骇人听闻的解决方法是使用 __sync_val_compare_and_swap 和我知道它永远不可能的值。那能解决问题吗? (有没有更干净的方法?)
【问题讨论】:
-
仅供参考,事实上,volatile 不会为多线程程序做任何你想做的事情。见:stackoverflow.com/questions/2484980/…
标签: c++ c linux shared-memory atomic