C# 你能给我一个简单的例子吗,当我要使用;“监测”;因为它不能用”来完成;锁";?
MSDN告诉我,使用锁相当于使用监视器 你能给我一个简单的(单进程)例子吗?为什么我会被迫使用C# 你能给我一个简单的例子吗,当我要使用;“监测”;因为它不能用”来完成;锁";?,c#,multithreading,synchronization,locking,C#,Multithreading,Synchronization,Locking,MSDN告诉我,使用锁相当于使用监视器 你能给我一个简单的(单进程)例子吗?为什么我会被迫使用Monitor,因为它不能用lock完成 你能给我一个简单的(单进程)例子吗?为什么锁不够的时候我会被迫使用监视器 当然。假设您希望在可以获取锁的情况下执行操作,但如果其他对象已经拥有该锁,则您不希望阻止的时间超过某一特定时间: bool gotMonitor = false; try { Monitor.TryEnter(monitor, 500, ref gotMonitor);
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);
}
}
(请注意,我不是故意这样做的-我使用的版本更可靠,因为ref
参数的设置对于锁获取来说是原子的。)
你能给我一个简单的(单进程)例子吗?为什么锁不够的时候我会被迫使用监视器
当然。假设您希望在可以获取锁的情况下执行操作,但如果其他对象已经拥有该锁,则您不希望阻止的时间超过某一特定时间:
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);
}
}
(请注意,我不是故意这样做的-我使用的版本更可靠,因为
ref
参数的设置对于锁获取来说是原子的。)根据您的报价,是什么让您认为您会被迫直接使用监视器
而不是锁定
?因为我看到了大量使用它的代码示例。还有,为什么它是可用的?@Fulproof:因为C#没有宏;p C中的其他语法sugar也是一样,比如使用
,foreach
,等等。根据你的引用,你认为你会被迫直接使用监视
,而不是锁定
,因为我看到了大量使用它的代码示例。还有,为什么它是可用的?@Fulproof:因为C#没有宏;p C中的其他语法sugar也是一样,比如使用,foreach
,等等@JonSkeet与问题本身没有绝对关系,但也有很多情况下,ReaderWriterLockSlim比监视器
工作得更好,因为它很容易支持递归。@MatíasFidemraizer:的确-我只是想给出一个值得直接使用监视器
的例子。@JonSkeet耶!不要误解我的意思,这只是一个建议,也许OP会发现其他选择:)@JonSkeet与问题本身没有绝对的关系,但也有很多情况下,ReaderWriterLockSlim比监视器
工作得更好,因为它很容易支持递归。@MatíasFidemraizer:的确-我只是想给出一个值得直接使用监视器
的例子。@JonSkeet耶!不要误解我的意思,这只是一个建议,也许OP会发现其他选择:)