简单的用法
lock
的常见用法是一个关键部分。
在以下示例中,应该从不同的线程调用 ReserveRoom
。与 lock
同步是防止竞争条件的最简单方法。方法体被 lock
包围,确保两个或多个线程不能同时执行它。
public class Hotel
{
private readonly object _roomLock = new object();
public void ReserveRoom(int roomNumber)
{
// lock keyword ensures that only one thread executes critical section at once
// in this case, reserves a hotel room of given number
// preventing double bookings
lock (_roomLock)
{
// reserve room logic goes here
}
}
}
如果一个线程到达 lock
-ed 块而另一个线程在其中运行,前者将等待另一个线程退出该块。
最佳做法是定义要锁定的私有对象,或私有静态对象变量以保护所有实例共有的数据。