Foros del Web » Programación para mayores de 30 ;) » C/C++ »

sincronizacion de hilos en c

Estas en el tema de sincronizacion de hilos en c en el foro de C/C++ en Foros del Web. Hola gente del froo tengo una dudo con hilos, verán tengo un arreglo de char que tiene dos letras, lo que quiero es crear dos ...
  #1 (permalink)  
Antiguo 14/06/2012, 23:41
Avatar de sadalsuud  
Fecha de Ingreso: marzo-2010
Ubicación: en la casa del duende
Mensajes: 96
Antigüedad: 14 años, 1 mes
Puntos: 1
sincronizacion de hilos en c

Hola gente del froo tengo una dudo con hilos, verán tengo un arreglo de char que tiene dos letras, lo que quiero es crear dos hilos y que cada uno de esos hilos cambien una de esas letras y mostrar luego de esto el arreglo de char modificado; tengo esto

Código C:
Ver original
  1. #include <pthread.h>    // libria para hilos
  2. #include <stdlib.h>
  3. #include <unistd.h>     // acceso a la API POSIX del SO
  4. #include <stdio.h>
  5.  
  6. char ids[3] = "XY";                 // arreglo
  7. int idHilos;                            // identificadores de hilos
  8. pthread_mutex_t semaforo;           // Global para que todos accedan al mutex
  9.  
  10. void *imprime(void *var){               // funcion que ejecutaran los hilos
  11.  
  12.     pthread_mutex_lock(&semaforo);      // Bloqueamos el acceso
  13.     int mi_id = *((int*)var);                           // numero del hilo
  14.    
  15.     if(mi_id == 0)                      // 1er hilo
  16.         ids[0] = 'D';
  17.     if(mi_id == 1)                      // 2do hilo
  18.         ids[1] = 'M';
  19.        
  20.     pthread_mutex_unlock(&semaforo);   
  21.     return NULL;
  22. }
  23.  
  24.  
  25. int main(){
  26.    
  27.     pthread_t h, p;
  28.     idHilos = 0;
  29.     pthread_create(&h, NULL, imprime, &(idHilos));
  30.     idHilos = 1;
  31.     pthread_create(&p, NULL, imprime, &(idHilos));
  32.    
  33.    
  34.     pthread_join(h, NULL);
  35.     pthread_join(p, NULL);
  36.    
  37.         // imprimo el arreglo
  38.     for(int i = 0; i < 11; i++){
  39.         printf("%c", ids[i]);
  40.     }
  41.    
  42.     return 0;  
  43. }


Pero de "XY" pasa a "XM" o sea la X no me la cambia por la D el primer hilo como que no está haciendo nada....

Ayuda! ... alguna sugerencia .. gracias por el tiempo eso si

Última edición por sadalsuud; 14/06/2012 a las 23:42 Razón: faltaban las cabeceras .h
  #2 (permalink)  
Antiguo 14/06/2012, 23:59
Avatar de sadalsuud  
Fecha de Ingreso: marzo-2010
Ubicación: en la casa del duende
Mensajes: 96
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: sincronizacion de hilos en c

jajajajajaja no falta que posteé para encontrar la solución:

Código C:
Ver original
  1. pthread_t h, p;
  2. idHilos = 0;
  3. pthread_create(&h, NULL, imprime, &(idHilos));
  4. pthread_join(h, NULL);
  5. idHilos = 1;
  6. pthread_create(&p, NULL, imprime, &(idHilos));
  7. pthread_join(p, NULL);

En el main() creo el 1er hilo, y le hago join de una vez, antes de crear al segundo hilo... así si, de antes estaba esperando al ultimo hilo solamente ... (o creo que esa puede ser una explicacion)

hasta luego!

Última edición por sadalsuud; 14/06/2012 a las 23:59 Razón: faltó una linea

Etiquetas: funcion, hilos, int, sincronizacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:50.