Next: Version 1 Up: Pastas de té Previous: Pastas de té

## Sección común

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;
    ----------------------------------------