El libro Programming Interface Condición Linux tiene una pieza de código (productor/consumidor) para mostrar cómo funciona la variable de condición:Cómo utilizar variable
static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
static int avail = 0;
while (TRUE) {
s = pthread_mutex_lock(&mtx);
while (avail == 0) { /* Wait for something to consume */
s = pthread_cond_wait(&cond, &mtx);
}
while (avail > 0) { /* Consume all available units */
avail--;
}
s = pthread_mutex_unlock(&mtx);
}
por las que utilizamos en pthread_mutex_lock
while
? ¿Por qué no lo usamos en un if
?
Además, puede haber despertadores espurios, por lo que siempre use 'while'. – ninjalj
¿Qué quieres decir con: wakeup espías –
@Majid Azimi la variable de condición puede ser señalada sin motivo aparente, no solo porque alguien llamó a pthread_cond_signal/broadcast – nos