Es medio complicado de entender si mezclás procedimientos que están adentro y afuera del monitor. Nadie te obliga a comprimir el código que va adentro del monitor. El monitor puede empezar en la página 1 y tener el end en la página 5 si querés dejar espacio por las dudas.
Los monitores tienen un "programa principal" para inicializar que va adentro de un bloque begin-end sin nombre y que corre al principio de todo. No es necesario tener un procedimiento "init"
En tu código nadie hace signal de p0, p1, p2 y p3, quedan en deadlock los que hacen wait.
Sobre tu punto 2 la letra no dice nada de que eso esté mal. La idea de ordenar para evitar deadlock es correcta.
Los monitores tienen un "programa principal" para inicializar que va adentro de un bloque begin-end sin nombre y que corre al principio de todo. No es necesario tener un procedimiento "init"
En tu código nadie hace signal de p0, p1, p2 y p3, quedan en deadlock los que hacen wait.
Sobre tu punto 2 la letra no dice nada de que eso esté mal. La idea de ordenar para evitar deadlock es correcta.