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);
}
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


0