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