c# – 如何使锁定对象静态影响其行为?

假设我有一个类似于以下成员的类:

readonly object _locker;

我用它来同步代码块,如下所示:

lock (_locker)
{
    // Do something

    Monitor.Pulse(_locker);
}

还有这个:

lock (_locker)
{
    while (someCondition)
        Monitor.Wait(_locker);

    // Do something else
}

假设我有这个特定类的多个实例,它们都使用不同的线程同时运行.

如果我将锁定器对象设置为静态,那么锁的行为和Monitor.Wait和Monitor.Pulse调用会发生什么?

static readonly object _locker;

他们都突然开始以锁步方式工作(例如,锁定一段代码会锁定对象的所有实例),或者行为没有变化?

解决方法:

通过使_locker静态,您可以创建1个共享关键区域.是的,他们都会互相等待.当您的共享数据也是静态的时,这是明智和必要的.

如果共享数据是每个实例,则不要使_locker静态.

换句话说,它取决于//做其他事情的真实代码.

上一篇:以编程方式将ScreenLock模式从“幻灯片”更改为“模式” Android


下一篇:MySQL(COUNT)是否在InnoDB中等待行锁?