我们需要锁定这个队列吗?

5Yr*_*DBA 2 .net c#

如果只有一个线程要添加到队列中,并且只有一个线程要从队列中检索,我认为没有必要为这些访问操作锁定队列.

通常,检索将处于循环中.如果它错过了一个项目,它将在下一次尝试中获得它.唯一关心的是得到部分数据.如果它是值类型队列并且该值大于一个基本内存单元,则可能发生.但如果它是一个参考类型,它应该没问题.

我对吗?

Jar*_*Par 6

假设你在谈论Queue<T>.

只要正在写入的线程和正在读取的线程是相同的线程,则不需要锁定.如果它们是不同的线程,则确实需要锁定.文档明确指出,如果不同线程上有读者和编写者,则需要锁定

  • 如果您使用的是.NET 4,则可以使用ConcurrentQueue <T>并让该类处理同步问题.http://msdn.microsoft.com/en-us/library/dd267265.aspx (5认同)