Esta página contiene un problema sobre la sincronización de procesos concurrentes. Índice:
En un festival benéfico, una de las actividades consiste en hacer pasteles y venderlos donando la recaudación a una asociación de ayuda al tercer mundo.
Suponemos un sistema con tres pasteleros (procesos) y un agente (proceso, que lleva los ingredientes desde un frigorífico hasta el puesto, por razones de sanidad). Cada pastelero hace continuamente un pastel y lo vende. Para hacer el pastel necesita tres ingredientes: masa, nata y chocolate. Un pastelero tiene nata, otro masa y otro chocolate. Cada pastelero dispone de cantidad indefinida de un ingrediente y el agente dispone de suministro indefinido de los tres.
El agente pone dos ingredientes sobre la mesa, el pastelero que tiene el tercero puede hacer y vender el pastel. Cuando termina se lo comunica al agente y este pone otros dos elementos sobre la mesa.
Implementar la sincronización de estos procesos.
/***********************************************************************************************
Programa que simula el funcionamiento del sistema Agente_Pastelero (ver explicación del problema).
Para compilar escribir:
En el archivo "nombre_fichero" se guardará el ejecutable del programa, por tanto para ejecutarle escribir:
nombre_fichero
************************************************************************************************
************************************************************************************************
NOMBRE: pastelero
SIPNOSIS: void pastelero(FILE *, int, key_t *, key_t, int *, int, int *, char *)
ARGUMENTOS:
DESCRIPCIÓN:
Lo primero que hace es abrir los semáforos que se le pasan por argumento, dando un mensaje de error si algo va mal. El número máximo de pasteles que puede hacer un pastelero es N (macro).
El pastelero no comienza a trabajar hasta que el agente le manda una señal. En ese momento, hace el pastel, incrementa en uno la variable compartida 'pastel', avisa al agente que ya ha terminado y espera una nueva señal.
Cierra todos los semáforos, y sale de la función.
************************************************************************************************
************************************************************************************************
FUNCIÓN PRINCIPAL
************************************************************************************************
NOMBRE:
SINOPSIS: void main ( )
DESCRIPCIÓN:
************************************************************************************************/
FERNÁNDEZ MARTÍNEZ, ITZIAR
SASTRE BATICÓN, NOELIA