Я хотел бы иметь возможность ждать / публиковать более одного ресурса одновременно. Есть ли встроенная структура c и интерфейс, который учитывает это?
В настоящее время я использую semaphore.h
, однако этот интерфейс имеет ограничение, заключающееся в том, что он может запрашивать только один ресурс за раз.
Я мог бы сделать что-то вроде этого:
for (int i = 0; i < resources; i++)
sem_wait(my_sem);
Но это заняло бы много времени, если resources
велико, и мне также нужно было бы добавить еще одну блокировку перед этим, чтобы я гарантировал, что запрашивающая сторона имеет приоритет над другими потоками, которые могут запрашивать ресурсы.
В конечном итоге это будет выглядеть примерно так:
sem_wait(my_lock);
for (int i = 0; i < resources; i++)
sem_wait(my_sem);
sem_post(my_lock);
не говоря уже о дополнительных проверках ошибок, которые должны были бы произойти.
То, что я хотел бы сделать, это что-то вроде этого:
sem_wait(my_lock, resources);
Это просто подождет, пока все ресурсы не станут доступны, а затем вернется после уменьшения семафора на запрошенное количество ресурсов. Я чувствую, что видел что-то подобное некоторое время назад, но не могу понять это.