Есть ли способ проверить, есть ли процессы, ожидающие внутри семафора в C?Я использую semaphore.h
для реализации семафоров, которые вы можете найти в справочной странице для здесь .
sem_getvalue(sem_t * semaphoreToCheck, int * whereToStoreValue)
позволяет вам получить текущее значение внутри semaphoreToCheck
и сохранить его внутри whereToStoreValue
, но sem_getvalue
всегда будет хранить 0
в whereToStoreValue
, если внутри есть процессы, ожидающие semaphoreToCheck
в системах на основе Linux.
Однако в semaphore.h семафоры не будут добавлять процессы в свою очередь ожидания, пока его значение не станет отрицательным.Это делает невозможным определение того, ожидают ли процессы в semaphoreToCheck
, используя sem_getvalue
, поскольку он будет хранить 0
в whereToStoreValue
, когда значение внутри semaphoreToCheck
равно 0 и , когда значение внутри semaphoreToCheck
отрицательно (что означает, что в очереди ожидания семафора есть процессы).
Для пояснения, в моей программе есть цикл, и в рамках этого цикла мне иногда нужно выпустить один процесс.Однако я не могу выпустить более одного процесса за раз по причинам, связанным с требованиями программы.В результате я должен убедиться, что семафор получает сигнал только тогда, когда в его очереди находится процесс.Это препятствует тому, чтобы значение семафора стало больше чем 0
, и это гарантирует, что процесс никогда не сможет работать без первой очереди в семафор.