Te lo dije, C++ no tiene maquina virtual ni rutina que controle esas cosas puesto que dependen del sistema operativo. De hecho, C++ es incapaz de separar dos clases (el compilador las transforma en simples funciones)
Ese ejemplo es un pelín más "avanzado". El ejemplo de semáforos ya te lo posteé y es válido para que escribas en el cajetín sin problemas.
Lo que cita ahí es el pthread_cond_wait. Que por decirlo de alguna forma, es para realizar sentencias condicionales entre threads de una forma más rápida. Aquí un ejemplo:
Código C:
Ver originalvoid* Hilo1(void* param)
{
pthread_mutex_lock(&mutex);
pthread_cond_wait(&condicicion, &mutex ); // esperamos que se cumpla la condicion
pthread_mutex_unlock(&mutex);
}
void* Hilo2(void* param)
{
pthread_mutex_lock(&mutex);
if (param) == NULL)
pthread_cond_signal(&condicicion, &mutex ); // Mensaje de cumplido
printf("Condicion cumplida 2");
pthread_mutex_unlock(&mutex);
}
Ahora bien, el estándar dice que se debe haber comprobado la condición desde el otro thread por si "acaso". En el ejemplo propuesto:
Código C:
Ver originalwhile(!hay paquebote)
pthread cond wait(&vc, &m)
Mientras el recurso paquebote no tenga un valor válido (NULL) no se usará. En la práctica solo se usará una iteración del bucle pero te cubres las espaldas por si necesitarás más.