Я пытаюсь использовать POSIX counting semaphore
как binary semaphore
?с использованием счетчика семафора POSIX в виде двоичного семафора
Для этой цели, я написал следующий код
sem = sem_open(argv[optind], flags, perms, 1); // Initialising semaphore to 1
while(sem_getvalue(sem) > 0)
{
continue;
}
sem_post(sem);
Существуют ли какие-либо другие методы, чтобы использовать счетный семафор в виде бинарного семафора? Здесь, если коммутация контекста происходит сразу после того, как lopp имеет значение false, и все же sem_post не был вызван, в такой ситуации это не привело бы к состоянию гонки? Есть ли какие-то другие лучшие чувства, чего я пытаюсь достичь.
У меня есть несколько процессов, синхронизированных с sempahore. Я знаю, что этот код не позволяет gurantee сценарию, когда во время sem_getvalue, даже если значение sem
становится равным нулю, даже до того, как вызов sem_post в определенном процессе вызывается, процесс anotehr также может вызвать sem_post, указав значение, равное 2. Как такой сценарий может быть разрешен.
Моя проблема не будет решена с помощью мьютекса, как и в моей проблеме, есть процессы, которые используются только для сигнала, т.е. sem_post
операции, в отличии от мьютекса, где все процессы будут иметь ожидания и сигнал постоянно
Возможный [дубликат] (https://stackoverflow.com/questions/32156321/making-binary-semaphore-shared-between-multiple-processesnot-threads-process/32158121#32158121). – Jason