在 .NET 中,关键字是andlock
周围的语法糖,所以你可以说这段代码Monitor.Enter
Monitor.Exit
lock(locker)
{
// Do something
}
是相同的
Monitor.Enter(locker);
try
{
// Do Something
}
finally
{
Monitor.Exit(locker);
}
然而 .NET 框架还包括MemoryBarrier
以类似方式工作的类
Thread.MemoryBarrier();
//Do something
Thread.MemoryBarrier();
我很困惑什么时候想使用Thread.MemoryBarrier
/lock
版本Monitor
?一个线程教程让我更加困惑,它指出它们的功能相同。
据我所见,明显的区别是不需要锁定对象,我想使用Monitor
它可以MemoryBarrier
在单个线程上跨线程执行某些操作。
我的直觉告诉我,另一个关键区别是MemoryBarrier
仅针对变量而不针对方法。
最后,这与现有问题何时在线程安全锁定代码中使用 'volatile' 或 'Thread.MemoryBarrier()' 无关?(C#),因为它专注于volatile
我理解其用法的关键字。