Program Algorrobo_Cola Type mon: Monitor; Var DormirCinta,Tapar,Llenar:Condition; Begin Procedure ENTRY avanzar(){ Begin if (puedo_llenar()){ Llenar.signal; DormirCinta.wait; } if (puedo_tapar()){ Tapar.signal; DormirCinta.wait; } End Procedure ENTRY DormirTapado() Begin Tapar.wait; End Procedure ENTRY DormirLlenado() Begin Llenar.wait; End } Procedure ENTRY DespertarCinta() Begin DormirCinta.signal; End End Procedure cinta() Begin While true do mon.avanzar; avanzar_cinta(); end End Procedure Maquina_llenar() Begin while true do if (!puedo_llenar()) then mon.DormirLlenado; end llenar_botella(); mon.DespertarCinta; end; End Procedure Maquina_tapar() Begin while true do if (!puedo_tapar()) then mon.DormirTapado; end tapar_botella(); mon.DespertarCinta; end; End /* PRINCIPAL */ Begin cobegin cinta(); Maquina_llenar(); Maquina_tapar(); coend End