C# 我怎么能只锁在一个地方
我有两个线程和一个C# 我怎么能只锁在一个地方,c#,multithreading,C#,Multithreading,我有两个线程和一个队列。第一个线程在循环中执行一些性能关键的工作,它在每次迭代中检查队列,如果队列不为空,则抓取字符串 现在我需要第二个线程将字符串安全地放入队列中。当第一个线程没有对队列执行任何操作时,只有第二个线程应该等待。我不想使用lock,因为它会阻塞第一个线程,最终会减慢它的速度 我该怎么做?我试图在我的第二个线程中仅使用lock语句包围Enqueue(),但ReSharper警告我: 该字段有时在同步块内使用,有时在不同步的情况下使用 所以我想我做得不对。要么不要使用队列,要么不要使
队列
。第一个线程在循环中执行一些性能关键的工作,它在每次迭代中检查队列
,如果队列
不为空,则抓取字符串
现在我需要第二个线程将字符串安全地放入队列中。当第一个线程没有对队列执行任何操作时,只有第二个线程应该等待。我不想使用lock
,因为它会阻塞第一个线程,最终会减慢它的速度
我该怎么做?我试图在我的第二个线程中仅使用lock语句包围Enqueue()
,但ReSharper警告我:
该字段有时在同步块内使用,有时在不同步的情况下使用
所以我想我做得不对。要么不要使用队列
,要么不要使用锁(例如a)。在这种情况下,我建议。要么不要使用队列
,要么不要使用锁(例如a)。在这种情况下,我建议。把它扔出去,以防它符合你的需要。你不能用吗?听起来ConcurrentQueue对我最近问的一个类似问题很有用。为队列的每次操作输入锁是保证线程安全/内存可见性的关键。如果这符合您的需要,请将其抛出。你不能用吗?听起来ConcurrentQueue对我最近问的一个类似问题很有用。为队列的每次操作输入锁是保证线程安全/内存可见性的关键。