我正在從原始文件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
總是成功。
我不知道我是否忽略了任何東西。任何澄清表示讚賞。