C 中的Lock機制

2021-10-08 21:29:46 字數 720 閱讀 4820

lock在msdn的定義:

lock關鍵字可以用來確保**塊完成執行,而不會被其他執行緒中斷。這是通過在**塊執行期間為給定物件獲取互斥鎖來實現的。

lock應用:經常用於防止多執行緒操作導致公用變數值出現不確定的異常,用於確保操作的安全性。

如上面**,當執行緒1和執行緒2都來呼叫這個方法的時候,當執行緒1先呼叫,執行緒1就會申請互斥鎖,當執行緒2再來執行時,發現lock這裡已經申請了互斥鎖,所以執行緒2需要等待執行緒1執行完成後,釋放互斥鎖,執行緒2才能申請新的互斥鎖並執行lock裡面的**。

注意:

lock不能鎖定空值,但null是不需要被釋放的。

lock不能鎖定string型別,雖然它也是引用型別的。因為字串型別被clr「暫留」。即整個程式中任何給定字串都只有乙個例項,具有相同內容的字串都代表著同乙個例項。因此,只要在應用程式程序中的任何位置處具有相同內容的字串上放置了鎖,就將鎖定應用程式中與該字串具有相同內容的字串。因此,最好鎖定不會被暫留的私有或受保護成員。

值型別不能被lock,因為前文標紅字的「物件被釋放」,值型別不是引用型別的

lock就避免鎖定public 型別或不受程式控制的物件

lock鎖定的物件是乙個程式塊的記憶體邊界

C 中物件的lock鎖定

寫c 時,遇到有過程需要排隊執行,就使用了lock方法進行鎖定,鎖定物件為一list陣列,在臨界區 段中對該資料進行讀取操作。在某些偶然情況下,會發現該資料在鎖定 段以外進行訪問時,會丟擲乙個異常 源陣列長度不足。請檢查 srcindex 和長度以及陣列的下限 此時再執行其他操作就無效了。後查閱資料...

C 中lock用法詳解

lock 關鍵字可以用來確保 塊完成執行,而不會被其他執行緒中斷。這是通過在 塊執行期間為給定物件獲取互斥鎖來實現的。先來看看執行過程,示例如下 lock 語句用於獲取某個給定物件的互斥鎖,執行乙個語句,然後釋放該鎖。lock statement lock 語句 複製 如下 lock express...

C 字串留用機制與Lock

因為c 的字串留用機制,下面的 string thekey1 string thekey2 if object.referenceequals thekey1,thekey2 thekey1,thekey2指向的是同乙個位址.但下面的 int thea 1 string thekey1 thea s...