描述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方法,就是每增乙個就每減乙個,正常來講,當我給出乙個數,那麼執行完之後...