網(wǎng)站建設(shè)排名公司哪家好網(wǎng)絡(luò)廣告公司排名
存儲一致性是為了保證多線程背景下的訪存順序,多線程的語句是可以交錯執(zhí)行,使得順序不同產(chǎn)生不同的執(zhí)行結(jié)果。
下面P2的輸出結(jié)果可能是什么?

P1, P2兩個線程的語句是可以交叉執(zhí)行的,比如1a, 2a, 2b, 1b;一個線程內(nèi)的語句,也是可以混序執(zhí)行的,如P1: 1b, 1a,這取決于編譯器和執(zhí)行情況。所以,P2 print B, print A,會有0 0, 2 1, 0 1, 2 0四種結(jié)果。
若不控制mem consist,P2 print的B A會千奇百怪,甚至?xí)蠦 2, A 0。線程內(nèi)內(nèi)不遵循程序序,線程間也不
加控制,導(dǎo)致語句執(zhí)行順序?yàn)?1b 2a 2b 1a。
Sequential Consistency (SC)
-
所有線程的內(nèi)存訪問執(zhí)行的順序必須與程序中指令順序一致
-
發(fā)出寫操作后,發(fā)出線程等待寫操作完成后再發(fā)出下一個內(nèi)存操作
-
發(fā)出讀操作后,發(fā)出線程等待讀操作完成,并等待返回值的寫操作完成后,然后再發(fā)出下一個操作
例子1


左邊是核心C1的程序指定順序,右邊是核心C2的程序指定順序,中間是實(shí)際的內(nèi)存訪問順序。簡而言之,不管是從哪個核心的角度,內(nèi)存訪問的順序都是遵循程序指定順序的 。
對于上述程序而言,只要是服從順序一致性內(nèi)存模型,最后程序的結(jié)果寄存器r2都能夠拿到值NEW,唯一不能確定的是執(zhí)行指令L1的次數(shù)。
例子2
以下為sc與非sc滿足的例子:
左側(cè)為Core 1,右側(cè)為Core 2的指令順序。只有d出現(xiàn)線程內(nèi)部訪存順序不符合程序指令順序,就是不符合SC的。
參考
https://zhuanlan.zhihu.com/p/161275959?utm_id=0
https://zhuanlan.zhihu.com/p/521775447