У меня есть следующая задача:
Существует пул эквивалентных ресурсов (например, входных слотов) и набор действий, которые необходимо выполнить с этим пулом.
Каждое действие выполняется в отдельном потоке.
Для каждого действия требуется разное количество доступных входных слотов.
Я хочу использовать что-то вроде семафоров для следующей задачи:
Все потоки действий выполняются одновременно
Действие выполняется, когда необходимое количество входных слотов свободно для использования.
Слоты освобождаются, когда действие завершено
Я не могу использовать обычный семафор, потому что невозможно установить отрицательное начальное значение семафора или уменьшить значение до тех пор, пока оно не станет отрицательным.
Поэтому мне нужен «семафор» с функцией WaitMultiple (int N), которая делает что-то вроде «подождать, пока значение ресурса не достигнет N»
Любые предложения, как я могу это решить? Я предпочитаю блокировку/освобождение потока, я не могу позволить себе активные циклы