Considere a seguinte situação:
- Você tem um programa que cria vários 'trabalhos' que precisam ser processados e os coloca em uma fila.
- Você tem outros programas de trabalho que agarram o próximo 'trabalho' na fila para que eles possam processar esse trabalho.
- Cada trabalho tem uma categoria.
- Pode haver qualquer número de categorias.
- Dois trabalhos que têm a mesma categoria não podem ser processados ao mesmo tempo por trabalhadores separados.
- Um trabalhador pode processar um trabalho de cada vez.
Uma fila tradicional não funcionaria nessa situação porque há uma chance de que vários trabalhos da mesma categoria sejam processados simultaneamente, o que não é permitido.
Você pode fazer com que o trabalhador verifique o trabalho que ele agarra e veja se essa categoria de trabalhos tem outro trabalhador que está sendo processado atualmente e, se for o caso, reenvie o trabalho para a fila a ser processada posteriormente. Parece uma maneira ineficiente de resolver esse problema. Existem estruturas de dados ou padrões de design que podem resolver esse problema?
Se você precisar de mais esclarecimentos, entre em contato.