Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 你能给我一个简单的例子吗,当我要使用;“监测”;因为它不能用”来完成;锁";?_C#_Multithreading_Synchronization_Locking - Fatal编程技术网

C# 你能给我一个简单的例子吗,当我要使用;“监测”;因为它不能用”来完成;锁";?

C# 你能给我一个简单的例子吗,当我要使用;“监测”;因为它不能用”来完成;锁";?,c#,multithreading,synchronization,locking,C#,Multithreading,Synchronization,Locking,MSDN告诉我,使用锁相当于使用监视器 你能给我一个简单的(单进程)例子吗?为什么我会被迫使用Monitor,因为它不能用lock完成 你能给我一个简单的(单进程)例子吗?为什么锁不够的时候我会被迫使用监视器 当然。假设您希望在可以获取锁的情况下执行操作,但如果其他对象已经拥有该锁,则您不希望阻止的时间超过某一特定时间: bool gotMonitor = false; try { Monitor.TryEnter(monitor, 500, ref gotMonitor);

MSDN告诉我,使用锁相当于使用监视器

你能给我一个简单的(单进程)例子吗?为什么我会被迫使用
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会发现其他选择:)