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

2021-08-22 08:38:10 字數 1281 閱讀 2640

描述c#多執行緒中 lock關鍵字

本文介紹c#

lock

關鍵字,c#提供了乙個關鍵字lock,它可以把一段**定義為互斥段(critical section),互斥段在乙個時刻內只允許乙個執行緒進入執行,而其他執行緒必須等待。

每個執行緒都有自己的資源,但是**區是共享的,即每個執行緒都可以執行相同的函式。這可能帶來的問題就是幾個執行緒同時執行乙個函式,導致資料的混亂,產生不可預料的結果,因此我們必須避免這種情況的發生。

c#提供了乙個關鍵字lock,它可以把一段**定義為互斥段(critical section),互斥段在乙個時刻內只允許乙個執行緒進入執行,而其他執行緒必須等待。在c# lock關鍵字定義如下:

lock(expression) statement_block

expression代表你希望跟蹤的物件,通常是物件引用。

如果你想保護乙個類的例項,一般地,你可以使用this;如果你想保護乙個靜態變數(如互斥**段在乙個靜態方法內部),一般使用類名就可以了。

而statement_block就是互斥段的**,這段**在乙個時刻內只可能被乙個執行緒執行。

下面是乙個使用c# lock關鍵字的典型例子,在注釋裡說明了c# lock關鍵字的用法和用途。

示例如下:

using

system; 

using

system.threading; 

namespace

thread******

internal

intwithdraw(

intamount) 

//取回、取款 //

下面的**保證在當前執行緒修改balance的值完成之前 

//不會有其他執行緒也執行這段**來修改balance的值  

//因此,balance的值是不可能小於0的  

lock

(this

)    

else

}  }internal

void

dotransactions()

//取款事務

}}   

internal

class

test  

for(

inti =0

; i 

<

10; i++)

for(

inti =0

; i 

<

10; i++)

}} } 

描述c#多執行緒中 lock關鍵字

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

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

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

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

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

多執行緒 使用c 中的 lock 關鍵字 在多個執行緒同時訪問乙個物件時,就可能出現第二個動作覆蓋第乙個動作的情況。這樣的執行緒是不安全的。所以我們可對方法體使用lock。如,執行緒t,t1 都要執行counter類下的count方法,就是每增乙個就每減乙個,正常來講,當我給出乙個數,那麼執行完之後...