Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.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 - Fatal编程技术网

C# 我怎么能只锁在一个地方

C# 我怎么能只锁在一个地方,c#,multithreading,C#,Multithreading,我有两个线程和一个队列。第一个线程在循环中执行一些性能关键的工作,它在每次迭代中检查队列,如果队列不为空,则抓取字符串 现在我需要第二个线程将字符串安全地放入队列中。当第一个线程没有对队列执行任何操作时,只有第二个线程应该等待。我不想使用lock,因为它会阻塞第一个线程,最终会减慢它的速度 我该怎么做?我试图在我的第二个线程中仅使用lock语句包围Enqueue(),但ReSharper警告我: 该字段有时在同步块内使用,有时在不同步的情况下使用 所以我想我做得不对。要么不要使用队列,要么不要使

我有两个线程和一个
队列
。第一个线程在循环中执行一些性能关键的工作,它在每次迭代中检查
队列
,如果
队列
不为空,则抓取字符串

现在我需要第二个线程将字符串安全地放入
队列中。当第一个线程没有对队列执行任何操作时,只有第二个线程应该等待。我不想使用
lock
,因为它会阻塞第一个线程,最终会减慢它的速度

我该怎么做?我试图在我的第二个线程中仅使用lock语句包围
Enqueue()
,但ReSharper警告我:

该字段有时在同步块内使用,有时在不同步的情况下使用


所以我想我做得不对。

要么不要使用
队列
,要么不要使用
锁(例如a)。在这种情况下,我建议。

要么不要使用
队列
,要么不要使用
锁(例如a)。在这种情况下,我建议。

把它扔出去,以防它符合你的需要。你不能用吗?听起来ConcurrentQueue对我最近问的一个类似问题很有用。为队列的每次操作输入锁是保证线程安全/内存可见性的关键。如果这符合您的需要,请将其抛出。你不能用吗?听起来ConcurrentQueue对我最近问的一个类似问题很有用。为队列的每次操作输入锁是保证线程安全/内存可见性的关键。