【发布时间】:2014-04-09 20:50:01
【问题描述】:
在下面的伪c程序中:
int shared;
pthread_barrier_t b;
// Thread 1
shared = 42;
pthread_barrier_wait(&b);
// Thread 2
pthread_barrier_wait(&b);
int v = shared;
printf("shared = %d\n", v);
POSIX 标准是否确保线程 2 总是打印 42 ? (我在 X86 上运行这个程序) 我花了一些时间阅读内存一致性模型(X86 的 TSO)和缓存一致性协议,我想知道我的问题的答案是否是肯定的,诸如 NPTL 之类的 pthread 实现如何保证这一点?如果答案是否定的,我应该怎么做才能确保始终打印 42?
此外,我有兴趣学习有关手动编写此类障碍(旋转障碍)的解决方案,并保证线程 1 在障碍之前写入的值始终被障碍之后的线程 2 看到。
【问题讨论】: