En el man page parece que incluso si inicializar un semáforo a un valor de uno:Cómo inicializar un semáforo binario en C
sem_init(&mySem, 0, 1);
Aún podría ser incrementado a un valor mayor que 1 con varias llamadas a
sem_post(&mySem);
Pero en este code example el comentario parece pensar de manera diferente:
sem_init(&mutex, 0, 1); /* initialize mutex to 1 - binary semaphore */
¿Es posible inicializar un semáforo estrictamente binario en C?
Nota: La razón para hacer esto en lugar de usar un mutex en este caso es el sem_post y sem_wait puede ser llamado por diferentes subprocesos.
¡Gracias! Terminé haciendo más o menos eso. – austinmarton
¿Cuál es exactamente el punto del bucle 'while' en' mysem_wait'? ¿No hará una simple declaración 'if' el trabajo ya que' pthread_cond_wait' va a requerir el mutex después de ser señalado y 'pthread_cond_signal' solo desbloquea un único hilo esperando la condición? –
@BillDeRose: las variables de condición están sujetas a despertares espurios y despertadores robados. ** Debes ** usarlos en un bucle si deseas verificar una condición. –