我在多处理器系统上的共享内存 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 的值,我知道它永远不可能。那能解决问题吗?(有没有更清洁的方法?)