在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
语句用于确保代码块在同一时间只能由一个线程访问,从而避免多线程同时访问共享资源时的数据不一致和竞态条件。