1. 程式人生 > 實用技巧 >C# Lock的用法

C# Lock的用法

當我們使用執行緒的時候,效率最高的方式當然是非同步,即各個執行緒同時執行,其間不相互依賴和等待。但當不同的執行緒都需要訪問某個資源的時候,就需要同步機制了,也就是說當對同一個資源進行讀寫的時候,我們要使該資源在同一時刻只能被一個執行緒操作,以確保每個操作都是有效即時的,也即保證其操作的原子性。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)
    {
    //互斥內容
    //...
    }
}