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.Wait和Monitor.Pulse调用的行为会发生什么static?
static readonly object _locker;
Run Code Online (Sandbox Code Playgroud)
他们都突然开始以锁步方式工作(例如,锁定一个代码块会lock跨越对象的所有实例),还是行为没有变化?
通过_locker创建静态,您可以创建1个共享关键区域.是的,他们都会互相等待.当您的共享数据也是静态的时,这是明智和必要的.
如果共享数据是每个实例,那么不要使 _locker静态.
换句话说,它取决于真正的代码// Do something else是什么.