【发布时间】:2010-07-21 04:58:51
【问题描述】:
我可以在 2 个线程之间使用 ConcurrentQueue 吗?我想检查我不需要明确地“锁定”任何地方。特别是看看我在 COMMENTS 中的行,我会在这里丢包吗...
public class PacketCapturer
{
private static ConcurrentQueue<Packet> _packetQueue = new ConcurrentQueue<Packet>();
public PacketCapturer(IPHostEntry proxyDns, ref BackgroundWorker bw)
{
// start the background thread
var backgroundThread = new System.Threading.Thread(BackgroundThread);
backgroundThread.Start();
// Start Packet Capture with callback via PacketCapturerCallback
}
private void PacketCapturerCallback(Packet packet)
{
_packetQueue.Enqueue(packet);
}
private static void BackgroundThread()
{
while (!BackgroundThreadStop)
{
if (_packetQueue.Count == 0) Thread.Sleep(250);
else
{
ConcurrentQueue<Packet> ourQueue;
ourQueue = _packetQueue; // COULD I DROP A PACKET BETWEEN HERE
_packetQueue = new ConcurrentQueue<Packet>(); // AND HERE???
Console.WriteLine("BackgroundThread: ourQueue.Count is {0}", ourQueue.Count);
}
}
}
【问题讨论】:
-
您永远不会同时使用队列(也就是说,您永远不会从第二个线程访问它),那么您为什么还要使用 ConcurrentQueue?
标签: c# .net multithreading concurrency