比如下面的類中兩個經典函數,如果 AB 線程分別同時執行不同的函數,
線程 A 對 12 指令重排,AB 線程執行順序為 2-3-4-1。
線程 B 對 34 進行了指令重排,先讀取 a 值為 0, 然后計算出 a*a= 0,臨時存儲下來,然后如果線程 A 執行完畢后導致 use 函數里的 i 最終是 0。
1 和 3 之間存在數據依賴關系,同時 2 和 3 之間也存在數據依賴關系。因此在最終執行的指令序列中,3 不能被重排序到 1 和 2 的前面(3 排到 1 和 2 的前面,程序的結果將會被改變)。但 1 和 2 之間沒有數據依賴關系,編譯器和處理器可以重排序 1 和 2 之間的執行順序。asif-serial 語義使單線程下無需擔心重排序的干擾,也無需擔心內存可見性問題
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.