monitor muestra begin int cant_salon = 0 int cant_docentes = 0 int cant_doc_esp = 0 int cant_estudiantes = 0 condition entrar_salon condition retirarDocente procedure ingresar_salon(tipoPersona): // tipoPersona = 0 (Docente) = 1 (Estudiante) if cant_salon == 20 then if !tipoPersona cant_doc_esp++ endif entrar_salon.wait() endif if tipoPersona then if cant_docentes = 0 || cant_doc_esp != 0 entrar_salon.wait() endif cant_salon++ cant_estudiantes++ else cant_docentes++ cant_salon++ if cant_doc_esp > 0 then cant_doc_esp-- endif retirarDocente.signal() endif end procedure salir_salon(tipoPersona): if !tipoPersona: if cant_docentes < 2 || cant_estudiantes > 0 then retirarDocente.wait() cant_docentes-- else cant_estudiantes-- if cant_estudiantes == 0 then retirarDocente.signal() endif cant_salon-- entrar_salon.signal() end end procedure docente(): begin ingresar_salon(0) Muestro_parciales() salir_salon(0) end procedure estudiante(): begin ingresar_salon(1) reviso_parcial() salir_salon(1) end procedure cobegin docente() ... docente() estudiante() ... estudiante() coend