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

Linux C - Threads

Estas en el tema de Linux C - Threads en el foro de C/C++ en Foros del Web. Buenas tardes gente. A ver primero de todo decir que en esto de los threads voy un poco flojo. Me cuesta entederlo, pero aqui estoy ...
  #1 (permalink)  
Antiguo 02/11/2012, 09:33
 
Fecha de Ingreso: septiembre-2011
Mensajes: 87
Antigüedad: 12 años, 7 meses
Puntos: 6
Linux C - Threads

Buenas tardes gente.

A ver primero de todo decir que en esto de los threads voy un poco flojo. Me cuesta entederlo, pero aqui estoy para ver si me podeis ayudar.

Os pondre la parte del programa que me falla.

El programa va sobre: tengo 3 hilos, 4 semaforos, y dos tablas (aux, num) de int[x]. Un hilo pedira un numero y lo pondra en la tabla aux, el segundo pasara el numero de la tabla aux a la tabla num, y el tercero leera de la tabla num. Todo esto jugando con los semaforos, para que no se avancen los hilos.

Código C:
Ver original
  1. typedef struct {
  2.     int tnum[K];            //array 1  
  3.     int tnumAux[K];               // array2    //los 2 son arrays circulares.
  4.     unsigned int in;            //en realidad solo necesito esta variable de todas las unsigned que tengo. Me dira si he llegado a final del array, y se pondra a 0 de nuevo.
  5.     unsigned int out;          
  6.     unsigned int num;          
  7.     unsigned int M_in;         
  8.     unsigned int M_out;        
  9. } t_data;
  10.  
  11. pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
  12.  
  13. sem_t sem1, sem2, sem3, sem4;
  14.  
  15.  
  16. void *f_in (void *d) {
  17. // Atenció al productor
  18. t_data *dt = (t_data *)d;
  19. int car;
  20. int fi=0, err;
  21.  
  22.     //for(fi=0;fi<K;fi++) {7
  23.     do{
  24.    
  25.         sem_wait(&sem1);
  26.         pthread_mutex_lock (&mut);
  27.  
  28.         printf("Pido numero:\n");
  29.         err = read(0,&car,1);
  30.  
  31.         dt->tnum[(dt->in)] = car;
  32.         //dt->paella[dt->in] = dt->M_in;
  33.         //printf ("He col·locat l'ou: %d\n", (dt->M_in)++);
  34.         (dt->in)++;
  35.         if (dt->in == K) dt->in = 0;
  36.         (dt->num)++;
  37.        
  38.  
  39.         printf("salimos,  Sem2 en verde:\n", car);
  40.         pthread_mutex_unlock (&mut);
  41.         sem_post(&sem2);
  42.     }while(car!='.');
  43. }
  44.  
  45. int main (int argc, char **argv) {
  46. t_data data;
  47. pthread_t pth[F];
  48. int i;
  49.     data.in = data.out = data.num = data.M_in = data.M_out = 0;
  50.  
  51.     sem_init(&sem1,0,1);
  52.     sem_init(&sem2,0,1);
  53.     sem_init(&sem3,0,1);
  54.     sem_init(&sem4,0,1);
  55.  
  56.     pthread_create (&(pth[0]), NULL, &f_in, (void *)&data);
  57.     pthread_create (&(pth[1]), NULL, &f_ch, (void *)&data);
  58.     pthread_create (&(pth[2]), NULL, &f_out, (void *)&data);
  59.  
  60.     for (i = 0; i<F; i++) pthread_join (pth[i], NULL);
  61. return (0);
  62. }

El problema que tengo es que al poner el semaforo sem1 en "rojo", se me bloquea el programa, solo escribo numero pero no sale nada, se queda atontao.

Verdadaramente no se ver el error. Alguien lo ve.

pd: el error o errores ejej.

Saludos
  #2 (permalink)  
Antiguo 03/11/2012, 10:40
 
Fecha de Ingreso: septiembre-2011
Mensajes: 87
Antigüedad: 12 años, 7 meses
Puntos: 6
Respuesta: Linux C - Threads

si yo voy flojo vosotros como vais?? ni un ayuda ni nada. gracias.

Vaya foro...

Etiquetas: int, linux, programa, threads, variables
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 21:45.