2

讓我們考慮這句話(Total Store Ordering):「在讀取之前讀取」是指內存排序中的含義?

讀取之前是有序的讀取,寫入以前寫的,讀以前寫的,但不能寫入之前讀取。

我覺得我幾乎得到了基礎:

  • 每個線程都有自己的程序順序(代碼被寫入時)
  • 在一般情況下,CPU可以指令重新排序,我們必須將其約束到排除不正確的排序
  • CPU也可以重新排序內存加載和存儲,我們必須限制這些以及
  • 當前的硬件實現了「序列化指令」像mfence這是INVO所有線程都解決了這兩個問題。
  • 硬件通常只允許一個髒緩存,所以它是所有關於刷新高速緩存:
    • 存儲線程刷新髒緩存
    • 加載線程的請求和阻塞,直到有沒有髒緩存
  • 內核開發人員關心CPU以外的其他設備訪問內存,但我不知道。

但是我仍然不明白「讀取之前的讀數」究竟意味着什麼。這可能意味着在這些體系結構中存在隱含的障礙和序列化指令,但我無法確定。

+0

可能讀取不會相對於其他讀取重新排序。 – immibis

+0

OP,請問您從哪裏得到這個報價?請注意,Sparc和經典的x86都不允許在這裏進行加載 - 重載 - https://en.wikipedia.org/wiki/Memory_ordering – Leeor

回答

0

我很確定我聽說在我的uni在希臘的操作系統課程裏,該死的,我用教授的聲音讀了它。 :)由於沒有人回答,我會嘗試回答。

想象一下,您是OS,每個線程/程序都想要執行讀取和寫入。現在,由於我們正在討論多線程,線程可能會讀取另一個線程寫入的內容,如變量的值。

現在,如果線程1要執行一個內存地址x的讀取和線程2要執行讀取x過,沒關係,讓他們以任何順序讀取x。這就是它的意思,我想!

希望它有助於某種方式,因爲我知道這不是最好的答案! :/