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

Rob*_*vey 4 c# multithreading locking

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

readonly object _locker;
Run Code Online (Sandbox Code Playgroud)

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

lock (_locker)
{
    // Do something

    Monitor.Pulse(_locker);
}
Run Code Online (Sandbox Code Playgroud)

还有这个:

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

    // Do something else
}
Run Code Online (Sandbox Code Playgroud)

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

如果我制作了锁定器对象,那么锁Monitor.WaitMonitor.Pulse调用的行为会发生什么static

static readonly object _locker;
Run Code Online (Sandbox Code Playgroud)

他们都突然开始以锁步方式工作(例如,锁定一个代码块会lock跨越对象的所有实例),还是行为没有变化?

Hen*_*man 5

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

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

换句话说,它取决于真正的代码// Do something else是什么.