Как определить, есть ли процессы, ожидающие в семафоре в C - PullRequest
0 голосов
/ 29 апреля 2019

Есть ли способ проверить, есть ли процессы, ожидающие внутри семафора в 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, и это гарантирует, что процесс никогда не сможет работать без первой очереди в семафор.

...