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.

Disculpen las molestias!.

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

Responder a