Ver Mensaje Individual
  #8 (permalink)  
Antiguo 27/05/2013, 01:26
amchacon
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 12 años, 4 meses
Puntos: 28
Respuesta: Pthread tipo c -> c++

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 original
  1. void* Hilo1(void* param)
  2. {
  3.    pthread_mutex_lock(&mutex);
  4.  
  5.    pthread_cond_wait(&condicicion, &mutex ); // esperamos que se cumpla la condicion
  6.  
  7.    printf("Condicion cumplida");
  8.  
  9.    pthread_mutex_unlock(&mutex);
  10. }
  11.  
  12. void* Hilo2(void* param)
  13. {
  14.    pthread_mutex_lock(&mutex);
  15.  
  16.    if (param) == NULL)
  17.        pthread_cond_signal(&condicicion, &mutex );  // Mensaje de cumplido
  18.  
  19.    printf("Condicion cumplida 2");
  20.  
  21.    pthread_mutex_unlock(&mutex);
  22. }

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 original
  1. while(!hay paquebote)
  2. 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.