Согласно документации ReleaseSemaphore , для параметра lReleaseCount
:
Величина, на которую увеличивается текущее число объектов семафора. Значение должно быть больше нуля. Если указанное количество приведет к тому, что счетчик семафора превысит максимальный счет, который был указан при создании семафора, счетчик не изменится, и функция вернет FALSE.
В этой и другой документации предполагается, что семафор не является правильным выбором для вашего ограничения. Созданный семафор имеет жесткий максимум, который нельзя изменить без воссоздания семафора. Другими словами, это не динамическое значение, которое можно изменить .
Вам нужно найти другой способ управления лимитом в этом сценарии.
Один из способов, которыми вы могли бы использовать семафор, было бы выделить семафор, достаточно большой для всех будущих потребностей, а затем просто взять достаточно «экземпляров» его для Доступный номер вернитесь к тому, что вам нужно на данный момент. Если вы хотите увеличить количество доступных экземпляров, просто отпустите те, которые вы захватили в начале.
Однако я спрашиваю, почему вы хотите это сделать. Что является ограничивающим фактором, который действительно решает, сколько заданий вы можете выполнять одновременно здесь? Скорее всего, семафор не правильный ответ на этот вопрос.