1. Semaforos
1.1. Es un tipo de variable usado para guardar el número de señales enviadas para despertar un proceso. Su valor puede ser cero o un valor positivo que indica el número de señales pendientes para despertar el proceso. Se establecieron dos operaciones:
1.1.1. La operación bajar comprueba si el valor es mayor que cero, si lo es decrementa el valor, es decir, usa una de las señales guardadas. Si el valor es cero el proceso puede dormirse.
1.1.2. La operación subir incrementa el valor del semáforo. Si uno o más procesos estuviesen dormidos sobre ese semáforo, incapaces de completar una anterior operación bajar, el sistema elige uno de ellos aleatoriamente y le permite completar esa operación bajar pendiente.
2. Monitores
2.1. Un monitor es una colección de procedimientos, variables y estructuras de datos que están todos agrupados juntos en un tipo especial de módulo o paquete. Los procesos pueden llamar a los procedimientos de un monitor siempre que quieran, pero no se les permite acceder directamente a las estructuras de datos internas del monitor desde procedimientos declarados fuera del monitor.
2.1.1. Problemas con los monitores
2.1.2. Fueron diseñados para resolver el problema de la exclusión mutua sobre una o más CPUs que tienen acceso a una memoria común.
2.1.3. Los monitores no están disponibles más que en unos pocos lenguajes de programación.
2.1.4. Además, no proporciona intercambio de información entre diferentes máquinas.