Se definen los pesos para cada tipo de pasta --pesoA, pesoB y pesoC--, y un tipo que representa a cada tipo de pasta:
CONST PesoA = ...; CONST PesoB = ...; CONST PesoC = ...; TYPE TipoPasta = (pastaA, pastaB, pastaC);
El recurso compartido Mostrador, se especifica como una cola de tamaño finito --o un buffer acotado con orden FIFO--. De esta forma aseguramos que las peticiones --pastas-- son elegidas por el empaquetador respetando el orden de llegada al mostrador.
-------------------------------------------------------------------------- CAPSULA Mostrador; VAR mostrador : COLA.TipoCola (* valor inicial: Vacia(mostrador)=TRUE *); OPERACION PonerPasta (pasta : TipoPasta); PRE: NOT (Llena (mostrador)); POST: Poner (mostrador, pasta); OPERACION TomarPasta (VAR pasta : TipoPasta); PRE: NOT (Vacia(mostrador)) POST: pasta = Primero (mostrador) -------------------------------------------------------------------------- TASK Horno (pasta : TipoPasta (* In *)); BEGIN LOOP << Producir "pasta" >> Mostrador.PonerPasta (pasta); END (* LOOP *) END Horno; ---------------------------------------- TASK Retirador; BEGIN LOOP Caja.RetirarCaja; END (* LOOP *) END Retirador; ---------------------------------------- TASK Reponedor; BEGIN LOOP Caja.ReponerCaja; END (* LOOP *) END Reponedor; ----------------------------------------