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