Mon utilisation de ConcurrentQueue est-elle ici entre 2 threads? Je voulais vérifier que je n'ai pas besoin de "verrouiller" n'importe où explicitement. En regard particulier sur les lignes où j'ai dans les commentaires que je déposer un paquet ici ...Mon utilisation de ConcurrentQueue est-elle ici entre 2 threads?
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);
}
}
}
Vous n'utilisez jamais la file d'attente simultanément (c'est-à-dire que vous n'y accédez jamais à partir du second thread), alors pourquoi utilisez-vous une ConcurrentQueue? – Gabe