1. 程式人生 > >單核、多核上鎖、同步操作、原子操作

單核、多核上鎖、同步操作、原子操作

(1)      所有的同步操作最基礎的理論就是原子操作,記憶體屏障、鎖都是為了保證在不同平臺或者cpu下的原子操作。

記憶體屏障作用:

A:在編譯時,拒絕編譯器優化之後的指令

B:在執行時,告訴記憶體地址匯流排,共享資料地址必須同步

鎖是記憶體中一種整型資料,只有兩種狀態:空閒和上鎖。

加鎖過程

1、  read lock

2、  判斷lock狀態

3、  如果已經加鎖,返回失敗

4、  把鎖狀態設定為上鎖

5、  返回成功

(2)      什麼情況下會導致不同執行緒同時得到鎖:

1、  中斷,上面1到5步驟中出現中斷,cpu被搶佔

2、  多核,可以同步在不同核心上處理1到5步驟

(3)      解決辦法

1:單核情況下,可以先關閉中斷,加鎖後再開啟中斷。Test-and-Set就是用來做這個事情的。Test-and-Set主要功能,取出記憶體某一單元的值。還有swap用來交換兩個記憶體單元的值。這兩個命令都是原子性的。

2:單核情況下Test-and-Set不會被中斷打斷所以是原子性的,對於多核來說Test-and-Set就不再是原子性的了。對於多核可以在鎖記憶體匯流排的情況下進行Test-and-Set。原子操作裡面的lock是鎖記憶體匯流排,這裡面的lock是保證執行的執行順序嚴格按照lock前,lock中,lock後的順序執行