Вы находитесь на странице: 1из 2

program LEMon; monitor LectEscr; export Entrar, Salir; var NLect: integer; Escribiendo: boolean; Leer, Escribir: condition;

procedure Entrar(Lector : boolean); begin if Lector then begin if Escribiendo or not EMPTY(Escribir) then delay(leer); nlect := nlect + 1; resume(leer); end else begin if Escribiendo or (NLect<>0) then delay(Escribir); Escribiendo:=true; end; end; procedure Salir(Lector : boolean); begin if Lector then begin Nlect:=Nlect - 1; if Nlect=0 then resume(escribir); end else begin Escribiendo:=false; if not EMPTY(leer) then resume(leer) else resume(Escribir); end; end; begin Escribiendo:=FALSE; NLECT:=0; end; var a,i,j:integer; PROCESS Lectores; BEGIN repeat LectEscr.Entrar(TRUE); writeln('LEYENDO....'); LectEscr.Salir(TRUE); forever END;

PROCESS ESCRITORES; BEGIN repeat LectEscr.Entrar(FALSE); writeln('ESCRIBIENDO...'); LectEscr.Salir(FALSE); forever END; begin cobegin Lectores; ESCRITORES; coend; end.

Вам также может понравиться