多執行緒學習一 可見性 原子性和有序性

2021-09-12 19:24:44 字數 546 閱讀 2422

在單核時代,所有的快取都操作同乙個cup上的快取,所以可見性很容易解決。當a執行緒更新了快取上的變數,那麼在b執行緒去訪問該變數的時候,拿到的一定是最新值。

在多核時代,每個cup都有自己的快取區,當不同cup上的執行緒去訪問記憶體中的同個變數時,假設該變數在cup中都有快取。那麼不同cup上的執行緒對變數的修改不會立馬同步到記憶體中,導致不同cup的快取中的同乙個變數對另外cup沒有可見性,這個就屬於硬體程式設計師給軟體程式設計師挖的「坑。

作業系統允許某個程序執行一小段時間,例如 50 毫秒,過50毫秒就會執行其他任務,這個過程叫任務切換,50毫秒我們就叫時間片。

原子性我們指的是把乙個操作或者多個操作在cup上的執行不被中斷,我們稱為原子性。cup能保證的原子性,是cup上的指令,而不是高階語言指令。

編譯器為了優化執行效率,會在不改變程式結果的前提下優化程式執行指令。

一般情況下不會有問題,但是在有些問題下,會導致一些難預見的問題。

課後筆記:32位的作業系統執行long型別的操作時,因為long型別超過了32位的單個空間,所以對long型別的操作是分成多次操作的,這些導致一些原子性的問題。

原子性,可見性,有序性

1.原子性 read,load,assign,use,store write 基本型別的訪問,讀寫 long,double 非原子性協定 monitorenter,monitorexit jvm lock,unlock,synchronized 2.可見性 volatile synchronized...

多執行緒程式設計學習十三(原子性 可見性與有序性)

原子 atom 指化學反應不可再分的基本微粒,原子在化學反應中不可分割。原子操作指的是不可分割的整體,多執行緒的原子性指的是沒有其他執行緒能夠中斷或檢查正在原子操作中的變數。從記憶體模型來看,直接保證的原子性變數操作包括 read load assign use store 和 write,我們大致...

多執行緒(一 併發理論基礎,可見性 原子性和有序性)

單核時代所有的執行緒都在一顆cpu上執行,cpu快取與記憶體一致性容易解決。所有執行緒都操作同一顆cpu的快取,乙個執行緒對快取的寫,對另乙個執行緒來說是可見的。乙個執行緒對共享變數的修改,另乙個執行緒立馬可見,這就是可見性。多核時代每個cpu都有自己的快取,多個執行緒在不同的cpu上執行時,這些執...