我怎样才能锁定一个地方

时间:2016-09-29 17:54:14

标签: c# multithreading

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

现在我需要第二个线程安全地将字符串放在Queue中。当第一个帖子没有对Queue做任何事情时,只有第二个帖子等待。我不想使用lock,因为它会阻止第一个帖子最终放慢速度。

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

  

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

所以我想我做得不对。

1 个答案:

答案 0 :(得分:4)

要么不使用Queue,要么不要使用lock(例如ReaderWriterLock)。在这种情况下,我建议ConcurrentQueue<T>