在C#多線程編程中,鎖是一種用于控制多個線程對共享資源訪問的機制。通過使用鎖,可以確保在任何給定時間只有一個線程可以訪問共享資源,從而避免數據競爭和不一致性的問題。
在C#中,可以使用lock
關鍵字來創建鎖。當一個線程進入lock
代碼塊時,它會嘗試獲取鎖。如果鎖已經被其他線程獲取,則該線程會被阻塞,直到鎖被釋放。一旦線程執行完lock
代碼塊中的邏輯,鎖會被自動釋放,允許其他線程獲取該鎖。
示例代碼如下:
class Program
{
private static object lockObj = new object();
static void Main(string[] args)
{
Thread t1 = new Thread(DoWork);
Thread t2 = new Thread(DoWork);
t1.Start();
t2.Start();
t1.Join();
t2.Join();
}
static void DoWork()
{
lock (lockObj)
{
// 執行需要保護的共享資源訪問操作
}
}
}
在上面的示例中,兩個線程t1
和t2
都會調用DoWork
方法,而DoWork
方法中的操作是通過lock
關鍵字來保護的,確保同一時間只有一個線程可以訪問共享資源。