Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/07/2011, 16:32
Avatar de sadalsuud
sadalsuud
 
Fecha de Ingreso: marzo-2010
Ubicación: en la casa del duende
Mensajes: 96
Antigüedad: 14 años, 8 meses
Puntos: 1
Pregunta ejemplo de hilos en c++

hola buenas tardes, tengo una duda, resulta que encontré un ejemplo por inernet sobre hilos y estoy estudiandolo y bien, pero al correrlo no hace lo que "denbería" hacer y ya he mirado el código demasiado como para pensar que el ejemplo está mal.

Verán el código, corre y según el ejemplo imprime esto :

xxxxx.....ooooo+++++

Pero a mi me imprime:

xxxxx+++++ooooo.....

x que se imprime en x es lo primero que pone, pero luego me coloca al revez el resto de impresiones

este es el código



Código C++:
Ver original
  1. #include  <pthread.h>
  2. #include  <stdlib.h>
  3. #include  <unistd.h>
  4. #include  <stdio.h>
  5.  
  6. pthread_mutex_t ptmutex1;
  7.  
  8. // imprime .
  9. void *thread_function01(void *arg) {
  10.    
  11.  
  12.     pthread_mutex_lock(&ptmutex1); 
  13.  
  14.     for (int i=0; i<5; i++) {
  15.         printf(".");
  16.         fflush(stdout);
  17.         sleep(1);
  18.     }
  19.     pthread_mutex_unlock(&ptmutex1);
  20.  
  21.     return NULL;
  22. }
  23. // imprime 0
  24. void *thread_function02(void *arg) {
  25.    
  26.  
  27.     pthread_mutex_lock(&ptmutex1);
  28.     for (int i=0; i<5; i++) {
  29.  
  30.         printf("o");
  31.         fflush(stdout);
  32.         sleep(1);
  33.  
  34.     }
  35.  
  36.     pthread_mutex_unlock(&ptmutex1);
  37.     return NULL;
  38. }
  39.  
  40. // imprime +
  41. void *thread_function03(void *arg) {
  42.    
  43.     pthread_mutex_lock(&ptmutex1);
  44.    
  45.     for (int i=0; i<5; i++) {
  46.         printf("+");
  47.         fflush(stdout);
  48.         sleep(1);
  49.     }
  50.  
  51.     pthread_mutex_unlock(&ptmutex1);
  52.    
  53.     return NULL;
  54. }
  55.  
  56. // imprime x
  57. int main(void) {
  58.    
  59.     pthread_t mithread001, mithread002, mithread003;
  60.    
  61.     if (pthread_create( &mithread001, NULL, thread_function01, NULL) ) {
  62.         printf("Error creando el hilo.");
  63.         abort();
  64.     }
  65.  
  66.     if (pthread_create( &mithread002, NULL, thread_function02, NULL) ) {
  67.         printf("Error creando el hilo.");
  68.         abort();
  69.     }
  70.  
  71.     if (pthread_create( &mithread003, NULL, thread_function03, NULL) ) {
  72.         printf("Error creando el hilo.");
  73.         abort();
  74.     }
  75.  
  76.    
  77.     pthread_mutex_lock(&ptmutex1);
  78.    
  79.     for (int i=0; i<5; i++) {
  80.         printf("x");
  81.         fflush(stdout);
  82.         sleep(1);
  83.     }
  84.  
  85.     pthread_mutex_unlock(&ptmutex1);
  86.    
  87.    
  88.     if (pthread_join(mithread001, NULL)) {
  89.         printf("Error union hilo 1");
  90.         abort();
  91.     }
  92.  
  93.  
  94.     if (pthread_join(mithread002, NULL)) {
  95.         printf("Error union hilo 2");
  96.         abort();
  97.     }
  98.  
  99.     if (pthread_join(mithread003, NULL)) {
  100.         printf("Error union hilo 3");
  101.         abort();
  102.     }
  103.  
  104.     exit(0);
  105.  
  106. }

Y en caso que esté bien la logica del código, mi pregunta es: cómo hago para imprimir en el orden que yo quiera es decir:

.....+++++xxxxxooooo

??

Es una pregunta de principiante en hilos en c++


gracias por el tiempo y la colaboración!

ciao