task body KUNDE is

  ZAHLEN, REST: GELD_T;

begin
  loop
    -- Geld zusammenkratzen
    TANKWART.BEZAHLEN(ZAHLEN);
    ZAPFSAEULE.PUMPE;
    TANKWART.RESTGELD(REST);
  end loop;
end KUNDE;

task body TANKWART is

  ZAHLEN, REST: GELD_T;
  MAXMENGE, ISTMENGE: LITER_T;

begin
  loop

    accept BEZAHLEN(BETRAG: GELD_T) do
      ZAHLEN:=BETRAG;
    end BEZAHLEN;

    -- maximale Benzinmenge berechnen
    ZAPFSAEULE.BERECHTIGUNG(MAXMENGE);
    accept BENZIN(MENGE: LITER_T) do
      ISTMENGE:=MENGE;
    end BENZIN;

    -- Restgeld berechnen
    accept RESTGELD(BETRAG: out GELD_T) do
      BETRAG:=REST;
    end RESTGELD;
  end loop;
end TANKWART;

task ZAPFSAEULE is

  MAXMENGE, ISTMENGE: LITER_T;

begin
  loop
    accept BERECHTIGUNG(MENGE: LITER_T) do
      MAXMENGE:=MENGE;
    end BERECHTIGUNG;
    accept PUMPE do
      -- Tanken bis voll oder MAXMENGE erreicht
    end PUMPE;
    TANKWART.BENZIN(ISTMENGE);
  end loop;
end ZAPFSAEULE;