[C con Clase] problemas con semaforos.

José Luis Torre joseluistorrehernandez en gmail.com
Mar Mar 27 13:00:31 CEST 2012


El argumento 0 es el nombre del programa.

Saludos
José Luis

El día 26 de marzo de 2012 16:46, alvaro martin garcia
<purifuri en gmail.com> escribió:
> Es un código muy simple para ver el funcionamiento de los semaforos.
>
> No se que hago mal.
>
> #include <pthread.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <unistd.h>
> #include <semaphore.h>
>
> int suma_total = 0;
> sem_t mutex;
> void * suma_parcial(void * arg) {
>   int temp_sem;
>   int j = 0;
>   int tmp = 0;
>   int ni=((int*)arg)[0];
>   int nf=((int*)arg)[1];
>
>   for (j = ni; j <= nf; j++){
>     tmp=tmp+j;
>     sched_yield();
>     sem_wait(&mutex);
>     suma_total = tmp;
>     sem_post(&mutex);
>   }
>   pthread_exit(0);
> }
>
> int main(void) {
>   pthread_t th1, th2;
>   int num1[2]={  1,   4999};
>   int num2[2]={5000, 10000};
>   sem_init(&mutex, 0, 1);
>
>   /* se crean dos threads con atributos por defecto */
>   pthread_create(&th1, NULL, suma_parcial, (void*)num1);
>   pthread_create(&th2, NULL, suma_parcial, (void*)num2);
>
>   printf("El thread principal continua ejecutando\n");
>
>   /* se espera su terminacion */
>   pthread_join(th1, NULL);
>   pthread_join(th2, NULL);
>   sem_destroy(&mutex);
>
>   printf("La suma total es: %d y debería ser (50005000)\n", suma_total);
>
>   return 0;
> }
>
> Asi es como lo tenia al principio, he quitado algunas líneas que he usado a
> modo de depuración, he comprobado que dentro de la zona crítica el valor es
> 0 y fuera el valor es 1.
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ



-- 
José Luis Torre
ww.ehu.es




Más información sobre la lista de distribución Cconclase