多執行緒系列 4 使用多執行緒的安全問題

2022-08-05 14:29:32 字數 669 閱讀 7456

在使用多執行緒的時候,往往存在一定的公共資料,為了避免多個執行緒同時操作同一資料,我們需要為執行緒加鎖。 加鎖的原理:

每一個引用型別的物件都有一個同步索引塊,指示當前使用該物件的執行緒數,每個執行緒執行到lock語句塊的時候就會判斷當前鎖定項(這裡是this,當前窗體物件)的同步索引塊是否等於0(即沒有執行緒在訪問該變數),如果等於0則進入執行塊,首先將同步索引塊的索引加1,表示當前多了一個執行緒使用this,等lock塊執行完成再將同步索引塊中的索引值減1,使得其它執行緒能夠繼續訪問,這樣就相當於實現了一個排隊機制,使得在適當的時候該序列執行的**序列執行。

我們可以利用lock語句為執行緒加鎖。示例**如下:

需要鎖定物件:lock(this)

需要鎖定**段:object obj = new object(); lock(obj)

我們還可以利用lock語句的語法糖monitor來實現,示例**如下:

class

control

catch

(excetion ex)

finally

}}

至此,這個初級的多執行緒入門系列完成了。後面隨著對多執行緒認識的加深,我們再來進行補充。

分類: c#基礎