El dom, 05-08-2007 a las 13:40 -0300, Sol Delgado escribió:
> Tengo una consulta sobre el siguiente código:
> 
> void* funcion(void* arg);
> 
> typedef struct Param{
>     int a;
>     int b;
>     int result;
>     pthread_mutex_t mutex;
> }Param;
> 
> int main(int argc, char **argv) { 
>     pthread_t idThread1, idThread2;
>     
>     Param param;
>     param.a = 1;
>     param.b = 2;
>     
>     pthread_create(&idThread1, NULL, &funcion, &param);
>     pthread_create(&idThread2, NULL, &funcion, &param); 
>     
>     pthread_join(idThread1,NULL);
>     pthread_join(idThread2,NULL);
>     printf("La suma da %d\n", param.result);
> 
>     pthread_exit(NULL);
> }
> 
> void* funcion(void* arg){
>     Param* param = (Param*)arg; 
>     pthread_mutex_lock(&(param->mutex));
>     param->result = param->a + param->b;
>     /* pthread_mutex_unlock(&(param->mutex)); */
>     printf("Hola mundo\n");
>     pthread_exit(NULL); 
> }

> 
> En teoria por lo que entiendo, debería quedar bloqueado el thread 2,
> dado que el thread 1 nunca desbloqueo el mutex. Ahora si lo ejecutó
> funciona lo mas bien (no se bloquea). Si alguien por favor me puede
> indicar porque no se bloquea o si existe algún error en el código. 
> 
> Estoy probando el tema de mutex, si dejo la variable mutex como global
> (fuera de la estructura Param) y dejo comentado el unlock ahí si queda
> bloqueado, pero cuando meto la variable mutex dentro de la estructura
> ya no queda bloqueado y no entiendo porque. 

No estas inicializando el mutex[1], fijate que valor te retorna
pthread_mutex_lock[1] que seguramente es "[EINVAL] The value specified
by mutex does not refer to an initialised mutex object."


[1]
http://www.opengroup.org/onlinepubs/007908775/xsh/pthread_mutex_init.html
[2]
http://www.opengroup.org/pubs/online/7908799/xsh/pthread_mutex_lock.html

saludos
-- 
Ricardo Markiewicz // http://www.fi.uba.ar/~rmarkie/

_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a