C# Lock的用法
阿新 • • 發佈:2021-01-03
當我們使用執行緒的時候,效率最高的方式當然是非同步,即各個執行緒同時執行,其間不相互依賴和等待。但當不同的執行緒都需要訪問某個資源的時候,就需要同步機制了,也就是說當對同一個資源進行讀寫的時候,我們要使該資源在同一時刻只能被一個執行緒操作,以確保每個操作都是有效即時的,也即保證其操作的原子性。lock是C#中最常用的同步方式,格式為lock(objectA){codeB} 。
lock(objectA){codeB} 看似簡單,實際上有三個意思,這對於適當地使用它至關重要:
1. objectA被lock了嗎?沒有則由我來lock,否則一直等待,直至objectA被釋放。
2. lock以後在執行codeB的期間其他執行緒不能呼叫codeB,也不能使用objectA。
3. 執行完codeB之後釋放objectA,並且codeB可以被其他執行緒訪問。
private static readonly object SequenceLock = new object(); public string XMethod(string params) { // ... lock (SequenceLock) { //互斥內容 //... } }