背景
我一直在阅读各种书籍和文章,以了解并发执行上下文中的处理器缓存、缓存一致性和内存屏障。但到目前为止,我一直无法确定我的常见编码实践在最严格的意义上是否安全。
假设
以下伪代码在双处理器机器上执行:
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。
参考
这些是我一直在阅读的相关文章和书籍: