在C#中,synchronized
并不是一個關鍵字。你可能是將其與Java中的 synchronized
關鍵字混淆了。在C#中,我們使用 lock
語句來實現同步,而不是Java中的 synchronized
關鍵字。
在C#中,lock
語句用于確保代碼塊在同一時間只能由一個線程訪問。這對于避免多線程同時訪問共享資源(如全局變量、文件等)時的數據不一致和競態條件非常有用。
以下是一些使用 lock
語句的應用場景:
lock
語句確保每次只有一個線程可以訪問該資源。private readonly object _lockObject = new object();
private int _sharedCounter;
public void IncrementCounter()
{
lock (_lockObject)
{
_sharedCounter++;
}
}
lock
語句確保只有一個線程可以創建實例。public class Singleton
{
private static Singleton _instance;
private static readonly object _lockObject = new object();
private Singleton() { }
public static Singleton Instance
{
get
{
if (_instance == null)
{
lock (_lockObject)
{
if (_instance == null)
{
_instance = new Singleton();
}
}
}
return _instance;
}
}
}
lock
語句:當多個線程可能同時觸發事件處理程序時,可以使用 lock
語句確保事件處理程序的代碼在同一時間只被一個線程執行。private readonly object _eventLock = new object();
public void OnSomeEvent(object sender, EventArgs e)
{
lock (_eventLock)
{
// 處理事件
}
}
總之,在C#中,lock
語句用于確保代碼塊在同一時間只能由一個線程訪問,從而避免多線程同時訪問共享資源時的數據不一致和競態條件。