IMPLEMENTACIÓN DE LAS FUNCIONES UTILIZADAS
#include "rshmem.h"
#include <stdlib.h>
#include <time.h>
#define N 20
/********************************************************************
FUNCIÓN PARA GENERAR UN INGREDIENTE
********************************************************************
generarIngrediente( ):
- -Genera un número aleatorio 'x' entre
{0,1,2}.
- -Si x=0 entonces el ingrediente que falta es
nata.
- -Si x=1 entonces el ingrediente que falta es
chocolate.
- -Si x=2 entonces el ingrediente que falta es
masa.
****************************************************************/
int generarIngrediente(FILE * pf){
- float n;
- int x;
- /*genera un número aleatorio entre 0 y 3*/
- n=rand();
- n/=RAND_MAX;
- n*=3;
- fprintf(pf,"el ingrediente que falta es:\n");
- fflush(pf);
- if(n<1){
- x=0;
- fprintf(pf,"nata\n");
- fflush(pf);
- }
- else
- if(n<2){
- x=1;
- fprintf(pf,"chocolate\n");
- fflush(pf);
- }
- else{
- x=2;
- fprintf(pf,"masa\n");
- fflush(pf);
- }
- return x;
}
/********************************************************************
FUNCIÓN PASTELERO
********************************************************************
pastelero( ):
- -El pastelero correpondiente espera hasta que
el proceso padre
- (agente) le manda una señal indicando
que ya tiene el ingrediente
- que le falta y puede comenzar a trabajar.
- -El pastelero hace y vende su pastel.
- -Una vez acabado envía una señal
al agente y espera a que le vuelvan
- a llamar.
*******************************************************************/
void pastelero(FILE *pf, int i, key_t *clavePastelero, key_t claveAgente,
int *spastelero, int sagente, int *pastel,char *fin){
- /*Abrir semaforos*/
- if(-1==(spastelero[i]=semOpen(clavePastelero[i]))){
- fprintf(stderr,"No tengo el cualificador de spastelero[%d]\n",i);
- fflush(stderr);
- }
- if(-1==(sagente=semOpen(claveAgente))){
- fprintf(stderr,"No tengo el cualificador de sagente\n");
- fflush(stderr);
- }
- /*El pastelero hace su trabajo*/
- while((*pastel)<N){
- semWait(spastelero[i]); /*s.e.*/
- fprintf(pf,"Pastelero[%d]:antes pastel=%d\n", i,*pastel);
- fflush(pf);
- TP;TP;
- (*pastel)++; /*s.c.*/
- TP;TP;
- fprintf(pf,"Ahora pastel=%d\n",*pastel);
- fflush(pf);
- semSignal(sagente); /*s.s.*/
- } /*fin del while*/
- fin[i]='x'; /* final de proceso*/
- /*Cerrar sem foros*/
- semClose(sagente);
- semClose(spastelero[i]);
- exit(1);
} /*fin pastelero*/
Ir a main