Семафор является счетным объектом.Вопрос в том, как заблокировать его несколькими счетами?
Например, я бы хотел вызвать функцию lock(num, timeout)
.Он блокируется, когда доступно по крайней мере num
доступных ресурсов, или происходит сбой при пропуске timeout
, но ресурсы по-прежнему меньше num
.
Возможно ли это в Windows?Или, может быть, с помощью pthread?
В настоящее время в Windows WaitForSingleObject
уменьшает количество объектов на 1
.Я думаю, что вызов WaitForSingleObject
несколько раз не может решить проблему, потому что:
точное время ожидания трудно достичь, и
Я хочу обработатьданные (запись на диск), когда все ресурсы num
доступны (запись данных большего размера происходит быстрее).Поэтому, например, если отдельно заблокировано менее num
ресурсов, мне, возможно, придется освободить (сразу после того, как я заблокирую) их в следующий раз, потому что остатки по-прежнему недоступны даже по истечении времени ожидания.Я думаю, что это плохой дизайн.Нужна помощь.