3 Stimmen

.net 4.0 Wörterbuch für gleichzeitige Warteschlangen

Ich möchte die neuen gleichzeitigen Sammlungen in .NET 4.0 verwenden, um das folgende Problem zu lösen.

Die grundlegende Datenstruktur, die ich haben möchte, ist eine Producer-Consumer-Warteschlange, es wird einen einzelnen Konsumenten und mehrere Produzenten geben.

Es gibt Einträge des Typs A,B,C,D,E, die zu dieser Warteschlange hinzugefügt werden. Einträge des Typs A,B,C werden der Warteschlange auf normale Weise hinzugefügt und in der Reihenfolge abgearbeitet.

Elemente des Typs D oder E können jedoch nur null oder einmal in der Warteschlange vorhanden sein. Wenn eines dieser Elemente hinzugefügt werden soll und bereits ein anderes Element desselben Typs vorhanden ist, das noch nicht verarbeitet wurde, sollte dieses andere Element in der Warteschlange an Ort und Stelle aktualisiert werden. Die Position in der Warteschlange würde sich nach der Aktualisierung nicht ändern (d. h. sie würde nicht an das Ende der Warteschlange wandern).

Welche .NET 4.0-Klassen wären dafür am besten geeignet?

3voto

František Žiačik Punkte 7225

Ich denke, es gibt keine solche (Prioritäts-) Warteschlange in .net 4, die atomare AddOrUpdate-Operation unterstützen würde. Es gibt nur ConcurrentDictionary, die dies unterstützt, aber es ist nicht geeignet, wenn Sie die Reihenfolge erhalten müssen.

Sie haben also die Möglichkeit, eine Kombination aus beidem zu verwenden.

Bitte beachten Sie jedoch, dass Sie die Sicherheit der nebenläufigen Strukturen verlieren, sobald Sie kombinierte Operationen mit ihnen durchführen; Sie müssen den Sperrmechanismus selbst implementieren (ein Beispiel für eine solche Situation finden Sie hier): Ein .Net4 Edelstein: Das ConcurrentDictionary - Tipps & Tricks ).

Die zweite Möglichkeit wäre, nach einigen Implementierungen von Drittanbietern zu googeln.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X