Самый простой способ сделать это - semaphores
.Вот как работает семафор:
Семафор - это, по сути, переменная, которая принимает нулевые / положительные значения.Процессы могут взаимодействовать с ним двумя способами: увеличивать или уменьшать семафор.
Увеличение семафора добавляет 1 к этой магической переменной , и это все. С уменьшением счетчика все становится интереснее : если счет достигает нуля, и процесс пытается снова его уменьшить, поскольку он не может принимать отрицательные значения, он будет блокироваться до тех пор, пока переменная не поднимется .
Если несколько блоков процессов ожидают уменьшения значения семафора, для каждого блока увеличивается только один из них, при этом увеличивается число.
Это позволяет очень легко создать работника / задачусистема: ваш менеджерский процесс ставит задачи в очередь и увеличивает значение семафора для соответствия оставшимся элементам, а ваши рабочие процессы пытаются уменьшить количество и постоянно получать задачу.Когда нет доступных задач, они будут блокироваться и не потреблять процессорное время.Когда он появляется, проснется только один из бездействующих процессов.Магия Insta-Sync.
К сожалению, по крайней мере в мире Unix, семафорный API не очень дружелюбен, поскольку по какой-то причине он работает с массивами семафоров, а не с отдельными.Но вы - простая оболочка от приятного интерфейса!
Ура!