我有两个 pthreads 正在读取/写入共享内存位置。在一个线程中,我不断检查内存位置的更新。(Linux, Glibc)
线程 1:
while(1) {
if (ptr)
ptr->do_something();
}
线程 2:
ptr = update();
这里的要点是,即使过了一段时间我也看不到更新。如果我按如下方式使用同步屏障,则更新立即可见:
while(1) {
__sync_synchronize();
if (ptr)
ptr->do_something();
}
所以我的问题是:
- 为什么过了很久还是看不到更新?
- __sync_synchronize() 究竟做了什么?
编辑 1:我理解为什么更新可能不会立即可见。我的问题特别是为什么即使在很长一段时间后也看不到它。