Ayuda con ejercicio de Hebras/Hilos y semaforos

Iniciado por Lotux5, 26 Octubre 2013, 21:14 PM

0 Miembros y 1 Visitante están viendo este tema.

Lotux5

EEl programa compila, pero no funcion por lo que no se cual puede ser el error.
Código (cpp) [Seleccionar]
#include <iostream>
#include <pthread.h>
#include <semaphore.h>
using namespace std;

const int num_items = 75 ;
const int tam_vec = 15 ;
int vector[tam_vec] ;
int primera_libre = 0 ;
int primera_ocupada = 0 ;
sem_t puede_leer, puede_escribir ;



int producir_dato(){

int contador = 1 ;
return contador++ ;
}

void consumir_dato( int dato ){

cout << "dato recibido: " << dato << endl ;
}



void * productor( void * ){

for( unsigned i = 0 ; i < num_items ; i++ ){
if (primera_libre == tam_vec)
primera_libre = 0;
int dato = producir_dato() ;
sem_wait (&puede_escribir);
vector[primera_libre] = dato ;
primera_libre++;
sem_post(&puede_leer);
}
}

void * consumidor( void * ){

for( unsigned i = 0 ; i < num_items ; i++ ){
int dato ;
if (primera_ocupada == tam_vec)
primera_ocupada = 0;
sem_wait (&puede_leer);
dato = vector[primera_ocupada] ;
primera_ocupada++ ;
sem_signal(&puede_escribir);
consumir_dato( dato ) ;
}
}

int main(){
pthread_t consumidora, productora;
sem_init( &puede_leer, 0, 1);
sem_init( &puede_escribir, 0 , 0);

pthread_create(&productora, NULL, productor, NULL);
pthread_create(&consumidora, NULL, consumidor, NULL);

pthread_join( productora, NULL ) ;
  pthread_join( consumidora, NULL ) ;

sem_destroy( &puede_escribir );
sem_destroy( &puede_leer );
}