我使用ConcurrentQueue在2個線程之間可以嗎?我想檢查我不需要明確地「鎖定」任何地方。特別是看看在那裏我有意見,我會放棄此數據包中的行...我在2線程之間使用ConcurrentQueue可以嗎?
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? – Gabe 2010-07-21 05:19:59