简单的用法

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 块而另一个线程在其中运行,前者将等待另一个线程退出该块。

最佳做法是定义要锁定的私有对象,或私有静态对象变量以保护所有实例共有的数据。