Если вы все равно взламываете Силка, думаю, вы можете делать все, что захотите
Как насчет того, чтобы каждая pthread приобрела единицу семафора до удаления из очереди (или кражи) рабочего объекта и освобождения его после выполнения работы? Конечно, может быть небольшая задержка, но количество потоков, доступных для работы, будет соответствовать количеству единиц, переданных семафору. Чтобы уменьшить количество доступных потоков на N из потока управления, подождите и получите N единиц, поэтому перекрыв N рабочих потоков. Чтобы запустить их снова, подайте сигнал N единиц.
Будет ли это работать для вашей системы?
Rgds,
Martin