多執行緒 使用C 中的lock關鍵字

2021-09-10 02:42:06 字數 637 閱讀 1083

【多執行緒】使用c#中的 lock 關鍵字

在多個執行緒同時訪問乙個物件時,就可能出現第二個動作覆蓋第乙個動作的情況。這樣的執行緒是不安全的。

所以我們可對方法體使用lock。

如,執行緒t,t1 都要執行counter類下的count方法,就是每增乙個就每減乙個,正常來講,當我給出乙個數,那麼執行完之後,結果應該是0,但是如果是沒有使用lock 即沒有1⃣️和2⃣️,那麼就很可能出現結果不為零,因為兩個執行緒同時訪問乙個物件時,訪問時值時相同的,但是都執行完操作把新的值賦給原來時,後賦值的就把先賦值的結果給覆蓋了,相當於第乙個賦值沒有操作。這種情況叫競爭條件。但是使用lock後,當乙個執行緒訪問乙個物件時首先它會把這個物件鎖死,其他執行緒不允許訪問,帶完成後再把鎖開啟,其他執行緒才可以進行操作。這樣就把不會出現結果不等0的情況,此時執行緒是安全的。

但是可想而知,這樣的機制可能會導致嚴重的效能問題。之後會進一步優化對待競爭條件的決策。

class counter 

public void increment() {

lock(_syncroot){    // 2⃣️

count++;

public void decrement(){

lock(_syncroot){   // 2⃣️

count--;

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

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

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

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

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

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