原子操作以及加鎖機制

2021-09-22 05:33:51 字數 810 閱讀 4065

一、原子操作

不可被中斷的乙個或一系列操作。

二、處理器如何實現原子操作

32位處理器使用基於對快取加鎖或匯流排加鎖的方式來實現多處理器之間的原子操作

(1)匯流排鎖:使用處理器提供乙個lock#訊號,當乙個處理器在匯流排上輸出此訊號的時候,其他處理器的請求將被阻塞,那麼該處理器可以獨佔使用共享記憶體。舉例:i=7,i++;兩個執行緒對i++進行操作,那我們最終期望的結果是9,但最終的結果可能是8,那麼想要保證讀改寫共享變數的操作是原子操作的,就使用匯流排鎖,就是說cpu1讀改寫共享變數的時候,cpu2不能操作快取了該共享變數記憶體位址的快取。

匯流排鎖是把cpu和記憶體之間通訊鎖住了,這使得鎖定期間,其他處理器不能操作其他記憶體位址的資料,所以匯流排鎖鎖定的開銷比較大。

(2)快取鎖定:如果快取在處理器快取行中記憶體區域在lock操作期間被鎖定,當它執行鎖操作回寫記憶體時,處理器不在匯流排上聲言lock#訊號,而是修改內部的記憶體位址,並允許它的快取一致性機制來保證操作的原子性,因為快取一致性機制會阻止同時修改被兩個以上處理器快取的記憶體區域資料,當其他處理器回寫已被鎖定的快取行的資料時會起快取無效,在(1)中的例子,當cpu1修改快取行中的i時,使用快取鎖定,那麼cpu2就不能同時快取i的快取行。

三、原子操作和加鎖機制

在編寫**的時候,能使用原子操作時,就盡量不要使用複雜的加鎖機制。對多數體系結構來說,原子操作與更複雜的同步方法相比較,給系統帶來的開銷小,對快取記憶體行的影響也小。但是,對於那些有高效能要求的**,對多種同步方法進行測試比較,也是一種明智的方法

原子性 競態條件 加鎖機制

首先直接上 下面是一段servlet public long getcount public void service servletrequest req servletresponse resp 上面這個 是為了統計有多個次訪問了servlet。但是該類是執行緒不安全的,因為 count看上去只...

Mysql事務以及加鎖機制

事務的特徵acid,即原子性 一致性 隔離性 永續性。原子性保證乙個事務為乙個最小的單元,內部不可分割 一致性保證事務中的每個操作執行緒不可單獨提交,成功則一起提交,不成功則事務回滾 隔離性保證不同事務間看到的資料檢視相互獨立,相互隔離 隔離級別可設定 永續性保證事務提交後資料會持久的儲存下來 sq...

互斥機制之原子操作

一 整型原子操作 1 設定原子變數的值 void atomic set atomic t v,int i 設定原子變數的值為i atomic t v atomic init 0 定義原子變數v並初始化為0 2 獲取原子變數的值 atomic read atomic t v 返回原子變數的值 3 原子...