C 中lock關鍵字的作用

2021-09-26 15:50:40 字數 1696 閱讀 8695

lock 關鍵字可以用來確保**塊完成執行,而不會被其他執行緒中斷。這是通過在**塊執行期間為給定物件獲取互斥鎖來實現的。

假設執行緒a先執行,執行緒b稍微慢一點。執行緒a執行到lock語句,判斷obj是否已申請了互斥鎖,

判斷依據是逐個與已存在的鎖進行object.referenceequals比較(此處未加證實),如果不存

在,則申請乙個新的互斥鎖,這時執行緒a進入lock裡面了。

這時假設執行緒b啟動了,而執行緒a還未執行完lock裡面的**。執行緒b執行到lock語句,檢查到obj

已經申請了互斥鎖,於是等待;直到執行緒a執行完畢,釋放互斥鎖,執行緒b才能申請新的互斥鎖並執行

lock裡面的**

namespace lock_test

thread.sleep(5*1000);

console.writeline("開始測成員態方法的同步");

lock we = new lock();

for (int i = 0; i < 5; i++)

console.read();}}

public class lock

",t1.tostring());

thread.sleep(200);

t1++;

console.writeline("t1自增後為:",t1.tostring());}}

public void increment2()

",t2.tostring());

thread.sleep(200);

t2++;

console.writeline("t2自增後為:",t2.tostring());}}

}}

執行結果如下:

從執行的結果來分析,變數是一次自增的,這說明,執行緒在執行自增函式的時候,是乙個執行緒乙個執行緒的執行自增函式的。為了對比結果,將**中的lock關鍵字去掉,**如下:

namespace lock_test

thread.sleep(5*1000);

console.writeline("開始測成員態方法的同步");

lock we = new lock();

for (int i = 0; i < 5; i++)

console.read();}}

public class lock

",t1.tostring());

thread.sleep(200);

t1++;

console.writeline("t1自增後為:",t1.tostring());

//}}

public void increment2()

",t2.tostring());

thread.sleep(200);

t2++;

console.writeline("t2自增後為:",t2.tostring());

//}}}}

去掉lock關鍵字後執行結果如下:

上面結果顯示,執行緒是同時執行自增函式的。

描述C 多執行緒中 lock關鍵字

描述c 多執行緒中 lock關鍵字 本文介紹c lock 關鍵字,c 提供了乙個關鍵字lock,它可以把一段 定義為互斥段 critical section 互斥段在乙個時刻內只允許乙個執行緒進入執行,而其他執行緒必須等待。每個執行緒都有自己的資源,但是 區是共享的,即每個執行緒都可以執行相同的函式...

描述C 多執行緒中 lock關鍵字

本文介紹c lock關鍵字,c 提供了乙個關鍵字lock,它可以把一段 定義為互斥段 critical section 互斥段在乙個時刻內只允許乙個執行緒進入執行,而其他執行緒必須等待。每個執行緒都有自己的資源,但是 區是共享的,即每個執行緒都可以執行相同的函式。這可能帶來的問題就是幾個執行緒同時執...

C 中explicit關鍵字作用

explicit是c 中不太常用的乙個關鍵字,其作用是用於修飾建構函式,告訴編譯器定義物件時不做隱式轉換。舉例說明 include include using namespace std class person int main int argc,char argv person person i...