多執行緒中lock的應用

2021-08-26 21:51:29 字數 642 閱讀 8423

看了很多關於c#中lock使用的說明,但是感覺都沒有說到點上。

最近做了乙個應用,吃了一些苦頭才把lock搞明白,關於lock的定義我就不多說了,這次主要說說lock在多執行緒中的應用及實際應用過程中遇到的問題。

多個執行緒訪問同乙個變數的時候就會用到lock,但是如何應用lock呢,lock物件需要object型別的,並且是static的,否則,多個執行緒會建立多個lockobject,就失去了lock的意義了(實際應用過程中沒有加static,會導致計算不準確,而且還是一會準確,一會不準確,很是頭疼,找不出錯誤的原因)。

再乙個就是執行緒處理的過程中有多個地方用到lock的時候是用乙個lockobject還是用多個,答案是多個,因為你只用乙個,會影響其他有lock**段的執行。

再乙個容易出錯的地方就是lock寫到**段的內部還是全域性的,答案是全域性的,如果寫到**段的內部,也不會報錯,但是效果就是相當於沒有加鎖,因為各自執行緒還會執行**段時建立lockobject物件再加鎖,相當於只是在本執行緒之內使用,無意義。

有的例項用lock(this),實際上效果是一樣的,相當於乙個靜態object物件,因為ths只有乙個,而且是object型的。

如果對lock還是不太明白,推薦大家看看王濤的一本書,《你必須知道的.net》,好像是這個書名,這本書裡面對lock的分析還是不錯的。

多執行緒中lock的應用

看了很多關於c 中lock使用的說明,但是感覺都沒有說到點上。最近做了乙個應用,吃了一些苦頭才把lock搞明白,關於lock的定義我就不多說了,這次主要說說lock在多執行緒中的應用及實際應用過程中遇到的問題。多個執行緒訪問同乙個變數的時候就會用到lock,但是如何應用lock呢,lock物件需要o...

多執行緒 Lock

reentrantlock和synchronized區別 作用跟synchronized 鎖一樣 reentrantlock 底層是 cas 值,期望,預期 synchronized 底層鎖公升級 reentrantlock 可以trylock 嘗試鎖 a.如果在某時間段內獲取到鎖,就執行 b.如果...

C 多執行緒中 lock用法

本文介紹c lockkeyword,c 提供了乙個keywordlock,它能夠把一段 定義為相互排斥段 critical section 相互排斥段在乙個時刻內僅僅同意乙個執行緒進入執行,而其他執行緒必須等待。每個執行緒都有自己的資源,可是 區是共享的,即每個執行緒都能夠執行相同的函式。這可能帶來...