Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/06/2012, 23:41
Avatar de sadalsuud
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