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, ¶m);
> pthread_create(&idThread2, NULL, &funcion, ¶m);
>
> 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