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

