Was ist die beste Queue
Datenstruktur in C# zu verwenden, wenn die Warteschlange für Enqueue()
für mehrere Threads verfügbar sein muss, aber nur Dequeue()
für einen einzigen Hauptthread benötigt? Meine Gewindestruktur sieht wie folgt aus:Warteschlangen und Threading
- Hauptthread - Consumer
- Sub Thread1 - Hersteller
- Sub Thread2 - Hersteller
- Sub Thread3 - Hersteller
Ich habe eine einzelne Queue<T> queue
, die alle Elemente enthält, die von den Unterthreads und den Hauptthreadaufrufenerzeugt werdenbis es leer ist. Ich habe folgende Funktion, die zu diesem Zweck an meinem Haupt-Thread aufgerufen wird.
public void ConsumeItems()
{
while (queue.Count > 0)
{
var item = queue.Dequeue();
...
}
}
der Haupt-Thread ruft diese Funktion auf einmal durch jede Fadenschlinge und ich möchte sicherstellen, dass ich queue
in einem Thread-sicher Herren bin Zugriff aber ich möchte auch Sperren queue
wenn mögliche Gründe für die Leistung zu vermeiden.
Angenommen, Sie etwas von [System.Collections.Concurrent] (https://msdn.microsoft.com/en-us/library/system.collections.concurrent (v = vs.110 wollen werden). aspx). – Equalsk
Ich würde explizites Warteschlangenmanagement vermeiden und stattdessen die TPL Dataflow-Bibliothek betrachten. –