C/Visual C - Programacion en C, usando Mutex!

 
Vista:

Programacion en C, usando Mutex!

Publicado por Mike Gonzalez (1 intervención) el 06/09/2009 20:23:03
Basicamente estoy haciendo un programa en C que simula un puente donde pueden pasar vehiculos uno por vez y en un solo sentido... Cuando lo compilo no da ningun error, pero al ejecutarlo (En Linux) me da un Error de Segmentacion, y hace referencia a la funcion pthread_join().

Alguien tiene idea de que puede estar pasando????


#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
volatile int Coches_Suben = 0;
volatile int Coches_Bajan = 0;
pthread_mutex_t mutex_puente;
pthread_mutex_t mutex_bajar;
pthread_mutex_t mutex_subir;

void Vehiculo_S(void) {
pthread_mutex_lock(&mutex_subir);
if (Coches_Suben == 0)
pthread_mutex_lock(&mutex_puente);
Coches_Suben++;
pthread_mutex_unlock(&mutex_subir);
printf(“Subiendo por el puente ”);
pthread_mutex_lock(&mutex_subir);
Coches_Suben--;
if (Coches_Suben == 0)
pthread_mutex_unlock(&mutex_puente);
pthread_mutex_unlock(&mutex_subir);
pthread_exit(0);
}

void Vehiculo_B(void) {
pthread_mutex_lock(&mutex_bajar);
if (Coches_Bajan == 0)
pthread_mutex_lock(&mutex_puente);
Coches_Bajan++;
pthread_mutex_unlock(&mutex_bajar);
printf(“Bajando por el puente ”);
pthread_mutex_lock(&mutex_bajar);
Coches_Bajan--;
if (Coches_Bajan == 0)
pthread_mutex_unlock(&mutex_puente);
pthread_mutex_unlock(&mutex_bajar);
pthread_exit(0);
}

int main()
{
pthread_t hilo1, hilo2, hilo3, hilo4;
pthread_attr_t attr;
pthread_mutex_init(&mutex_puente, NULL);
pthread_mutex_init(&mutex_subir, NULL);
pthread_mutex_init(&mutex_bajar, NULL);
pthread_create(&hilo1, &attr, (void *) Vehiculo_S, (void *) NULL);
pthread_create(&hilo2, &attr, (void *) Vehiculo_B, (void *) NULL);
pthread_create(&hilo3, &attr, (void *) Vehiculo_B, (void *) NULL);
pthread_create(&hilo4, &attr, (void *) Vehiculo_S, (void *) NULL);
pthread_join(hilo1, NULL);
pthread_join(hilo2, NULL); <<<< EN ESTA PARTE, CUAL ES EL ERROR?
pthread_join(hilo3, NULL);
pthread_join(hilo4, NULL);
pthread_mutex_destroy(&mutex_puente);
pthread_mutex_destroy(&mutex_subir);
pthread_mutex_destroy(&mutex_bajar);
exit(0);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Programacion en C, usando Mutex!

Publicado por Tom (619 intervenciones) el 07/09/2009 13:08:52
Estás pasando a pthread_create, unos atributos sin inicializar (probablemente con basura).

Inicializa la variable attr, o no la uses :-)

Esto funcionaría:

printf("th1 %d ", pthread_create(&hilo1, NULL, (void *) Vehiculo_S, (void *) NULL));
printf("th2 %d ", pthread_create(&hilo2, NULL, (void *) Vehiculo_B, (void *) NULL));
printf("th3 %d ", pthread_create(&hilo3, NULL, (void *) Vehiculo_B, (void *) NULL));
printf("th4 %d ", pthread_create(&hilo4, NULL, (void *) Vehiculo_S, (void *) NULL));
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar