寫c#**時,遇到有過程需要排隊執行,就使用了lock方法進行鎖定,鎖定物件為一list陣列,在臨界區**段中對該資料進行讀取操作。在某些偶然情況下,會發現該資料在鎖定**段以外進行訪問時,會丟擲乙個異常:「源陣列長度不足。請檢查 srcindex 和長度以及陣列的下限」,此時再執行其他操作就無效了。後查閱資料發現,lock鎖定**中對該資料的操作尚未執行完畢,別處就已在使用該陣列,可能是導致異常的乙個原因,遂將原來的鎖定**:
lock (lsfieldinfo)
修改為:
object synobj = new object();
lock (synobj)
嘗試發現,能解決問題。 C 執行緒Lock鎖 只能鎖定物件
一.為什麼要lock,lock了什麼?當我們使用執行緒的時候,效率最高的方式當然是非同步,即各個執行緒同時執行,其間不相互依賴和等待。但當不同的執行緒都需要訪問某個資源的時候,就需要同步 機制了,也就是說當對同乙個資源進行讀寫的時候,我們要使該資源在同一時刻只能被乙個執行緒操作,以確保每個操作都是有...
C 中的Lock機制
lock在msdn的定義 lock關鍵字可以用來確保 塊完成執行,而不會被其他執行緒中斷。這是通過在 塊執行期間為給定物件獲取互斥鎖來實現的。lock應用 經常用於防止多執行緒操作導致公用變數值出現不確定的異常,用於確保操作的安全性。如上面 當執行緒1和執行緒2都來呼叫這個方法的時候,當執行緒1先呼...
C 中Monitor物件與Lock關鍵字的區別分析
這篇文章主要介紹了c 中monitor物件與lock關鍵字的區別,需要的朋友可以參考下 monitor物件 1.monitor.enter object 方法是獲取 鎖,monitor.exit object 方法是釋放鎖,這就是monitor最常用的兩個方法,當然在使用過程中為了避免獲取鎖之後因為...