【发布时间】:2011-02-28 09:27:46
【问题描述】:
背景
我一直在阅读各种书籍和文章,以了解并发执行环境中的处理器缓存、缓存一致性和内存屏障。不过到目前为止,我还无法确定我的常见编码实践在最严格的意义上是否安全。
假设
-
以下伪代码在双处理器机器上执行:
int sharedVar = 0; myThread() { print(sharedVar); } main() { sharedVar = 1; spawnThread(myThread); sleep(-1); } main() 在处理器 1 (P1) 上执行,而 myThread() 在 P2 上执行。
最初,sharedVar 存在于 P1 和 P2 的缓存中,初始值为 0(由于上面未显示的一些“预热代码”。)
问题
严格来说——最好不假设任何特定类型的 CPU——myThread() 是否保证打印 1?
根据我对处理器缓存的新知识,在 print() 语句时,P2 可能没有收到由 P1 在 main() 中的赋值导致的 sharedVar 无效请求,这似乎完全有可能。因此,myThread() 似乎有可能打印 0。
参考文献
这些是我一直在阅读的相关文章和书籍:
【问题讨论】:
标签: multithreading caching thread-safety cpu-architecture