Трудно сказать, не зная больше о том, как вы его используете, но похоже, что подсчитанный семафор вполне может решить проблему.Вы выпускаете семафор N раз.Это позволяет N потоков работать.Когда N потоков были освобождены, семафор сбрасывается.Обратите внимание, что технически это не обязательно N отдельных потоков - это может быть 1 поток, выпущенный N раз.
Таким образом, если вы хотите / хотите убедиться, что вы выпускаете N отдельных потоков, вы можете(для одной возможности) хотите создать 2 отдельных семафора, чередуя их для последовательных шагов процесса.N потоков ожидают первого семафора.Когда вы отпускаете его N раз, каждый поток запускается, а затем ожидает семафор other .В конце концов все потоки будут освобождены первым семафором и запущены, что приведет к сбросу этого семафора.
Затем вы можете выполнить следующий шаг обработки, используя другой семафор.
Обратите внимание, однако, чтомногое из этого противоречит тому, как потоки работают лучше всего.Вы заставляете все потоки оставаться в режиме блокировки, но они, как правило, в лучшем виде, если вы просто позволяете им работать как можно более «свободно».