MSDN 告诉我,使用 lock 等同于使用监视器,但更简洁且不易出错。
你能给我一个简单的(单一进程)示例,为什么我会Monitor
因为无法完成而被迫使用lock
?
MSDN 告诉我,使用 lock 等同于使用监视器,但更简洁且不易出错。
你能给我一个简单的(单一进程)示例,为什么我会Monitor
因为无法完成而被迫使用lock
?
你能给我一个简单的(单进程)示例,为什么当锁不够时我会被迫使用监视器?
当然。假设您想在可以获得锁的情况下采取行动,但如果其他对象已经拥有它,您不想阻塞超过一定时间:
bool gotMonitor = false;
try
{
Monitor.TryEnter(monitor, 500, ref gotMonitor);
if (gotMonitor)
{
// Okay, we're in the lock. We can do something useful now.
}
else
{
// Timed out - do something else
}
}
finally
{
if (gotMonitor)
{
Monitor.Exit(monitor);
}
}
(请注意,我故意不 使用TryEnter
仅返回成功/失败的重载- 我使用的版本更可靠,因为ref
参数的设置对于锁定获取而言是原子的。)