Вот способ использования следующей структуры, где у вас есть блок ожидания перед входом каждого из типов деталей, которые будут составлять ваши продукты ... у вас также есть вспомогательная очередь после ассемблера и перед очередью, которую выупомянуто, что имеет размер 1 ... Я буду предполагать, что у вас есть только 1 ресурс, доступный, потому что иначе я думаю, что было бы бессмысленно иметь очередь размера 1, но вы можете расширить ее для использования большего количества ресурсов, если вам нужно,Блоки ожидания и блоки вспомогательной очереди имеют максимальную емкость:
Теперь создайте функцию startAssembly, которая будет выполнять следующие действия:
if(auxiliaryQueue.size()==0 && wait.size()>=assembler.quantity1 && wait1.size()>=assembler.quantity2 && resourcePool.idle()>0){
for(int i=0;i<assembler.quantity1;i++)
wait.free(wait.get(i));
for(int i=0;i<assembler.quantity2;i++)
wait1.free(wait1.get(i));
}
Эта функция запускает процесс сборки только в том случае, если ресурс свободен, если в очереди размера 1 нет продуктов и если частей достаточно для сборки продукта.
Вы будете называть этофункция в 3 разных местах с использованием startAssembly();
- при входе блока ассемблера
- при входе блока ожидания
- при входе вводаблока wait1