Código PHP:
#include <pthread.h>
#include <semaphore.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>
include <iostream>
using namespace std;
namespace PracticaUno{
int vec_int[tam_vec];
const int tam_vec = 10;
const int num_items = 50;
sem_t m, productor, consumidor;
int producir_dato() {
static int contador = 1 ;
return contador ++ ;
}
void consumir_dato( int dato ){
cout << "\nDato recibido --> " << dato << endl ;
}
void * productor ( void * ){
for( unsigned i = 0 ; i < num_items ; i++ ){
int dato = producir_dato() ;
wait(consumidor);
wait(m);
vec_int[i] = dato;
signal(cons);
signal(m);
}
return NULL ;
}
void * consumidor( void * ){
for( unsigned i = 0 ; i < num_items ; i++ ){
int dato ;
wait(consumidor);
wait(m);
dato=vec_int[i];
signal(cons);
signal(m);
consumir_dato( dato ) ;
}
return NULL ;
}
void hebras(){
pthread_t hebra_productora, hebra_consumidora;
sem_init(&productor, 0, 10);
sem_init(&consumidor, 0, 0);
sem_init(&m, 0 , 1);
pthread_create(&hebra_productora, NULL, productor, NULL);
pthread_create(&hebra_consumidora, NULL, consumidor, NULL);
pthread_join(hebra_productora, NULL);
pthread_join(hebra_consumidora, NULL);
sem_destroy(&productor);
sem_destroy(&consumidor);
sem_destroy(&m);
cout << "FIN" << endl;
}
}
int main(){
PracticaUno::hebras();
}