在C#多線程編程中,鎖是一種用于控制多個(gè)線程對共享資源訪問的機(jī)制。通過使用鎖,可以確保在任何給定時(shí)間只有一個(gè)線程可以訪問共享資源,從而避免數(shù)據(jù)競爭和不一致性的問題。
在C#中,可以使用lock
關(guān)鍵字來創(chuàng)建鎖。當(dāng)一個(gè)線程進(jìn)入lock
代碼塊時(shí),它會嘗試獲取鎖。如果鎖已經(jīng)被其他線程獲取,則該線程會被阻塞,直到鎖被釋放。一旦線程執(zhí)行完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)
{
// 執(zhí)行需要保護(hù)的共享資源訪問操作
}
}
}
在上面的示例中,兩個(gè)線程t1
和t2
都會調(diào)用DoWork
方法,而DoWork
方法中的操作是通過lock
關(guān)鍵字來保護(hù)的,確保同一時(shí)間只有一個(gè)線程可以訪問共享資源。