Betrachten Sie die folgende Situation:
- Sie haben ein Programm, das zahlreiche 'Jobs' erstellt, die verarbeitet werden müssen, und diese in eine Warteschlange stellt.
- Sie haben andere Worker-Programme, die den nächsten Job in der Reihe abrufen, damit sie diesen Job verarbeiten können.
- Jeder Job hat eine Kategorie.
- Es kann eine beliebige Anzahl von Kategorien geben.
- Zwei Jobs mit derselben Kategorie können nicht gleichzeitig von separaten Mitarbeitern bearbeitet werden.
- Ein Mitarbeiter kann jeweils einen Auftrag bearbeiten.
Eine herkömmliche Warteschlange würde in dieser Situation nicht funktionieren, da die Möglichkeit besteht, dass mehrere Jobs derselben Kategorie gleichzeitig verarbeitet werden, was nicht zulässig ist.
Sie können den Worker veranlassen, den Job zu überprüfen, der erfasst wird, um festzustellen, ob in dieser Jobkategorie ein anderer Worker gerade verarbeitet wird, und den Job in diesem Fall erneut in die Warteschlange zu senden, um ihn zu einem späteren Zeitpunkt zu verarbeiten. Dies scheint ein ineffizienter Weg zu sein, um dieses Problem zu lösen. Gibt es Datenstrukturen oder Entwurfsmuster, die dieses Problem lösen können?
Wenn Sie weitere Erläuterungen benötigen, lassen Sie es mich bitte wissen.