我正在从原始文件Memory Barriers: a Hardware View for Software Hackers复制该图的文本。内存障碍:软件黑客的硬件视图示例3
表4示出三个码片段,由CPU的0,1同时执行,和2所有变量都是初始为零。
请注意,除非CPU 1和CPU 2在第3行上看到CPU 0分配给“b”,否则CPU 1和CPU 2都不能继续行5。一旦CPU 1和2在第4行上执行了其内存屏障,它们都将保证请参阅第2行上的内存屏障之前的CPU 0的所有分配。同样,第8行上的CPU 0的内存屏障与第4行上的CPU 1和2的内存屏障配对,因此CPU 0不会在线执行“e”分配9直到其赋值为“a”之后对其他两个CPU均可见。因此,保证线9上的CPU 2断言不会触发。
对我来说,线6-9上CPU0似乎没有必要在所有的,因为在第2行存储器屏障CPU 0和内存屏障在第4行用于CPU 1 & 2保证了作用的b=1
被拿起,以及所有商店之前,以及a=1
。然后,断言e == 0 || a == 1
总是成功。
我不知道我是否忽略了任何东西。任何澄清表示赞赏。