2
讓我們考慮這句話(Total Store Ordering):「在讀取之前讀取」是指內存排序中的含義?
讀取之前是有序的讀取,寫入以前寫的,讀以前寫的,但不能寫入之前讀取。
我覺得我幾乎得到了基礎:
- 每個線程都有自己的程序順序(代碼被寫入時)
- 在一般情況下,CPU可以指令重新排序,我們必須將其約束到排除不正確的排序
- CPU也可以重新排序內存加載和存儲,我們必須限制這些以及
- 當前的硬件實現了「序列化指令」像
mfence
這是INVO所有線程都解決了這兩個問題。 - 硬件通常只允許一個髒緩存,所以它是所有關於刷新高速緩存:
- 存儲線程刷新髒緩存
- 加載線程的請求和阻塞,直到有沒有髒緩存
- 內核開發人員關心CPU以外的其他設備訪問內存,但我不知道。
但是我仍然不明白「讀取之前的讀數」究竟意味着什麼。這可能意味着在這些體系結構中存在隱含的障礙和序列化指令,但我無法確定。
可能讀取不會相對於其他讀取重新排序。 – immibis
OP,請問您從哪裏得到這個報價?請注意,Sparc和經典的x86都不允許在這裏進行加載 - 重載 - https://en.wikipedia.org/wiki/Memory_ordering – Leeor