https://drive.google.com/file/d/1LifvSM6rxMOl1ZqksKTZrw_GU7VgDaQH/view → 1:40:00

En vez de tener una estructura de control vinculada con un dato (semáforo) ahora solo tengo la parte de estructura de control (Monitor)

Me voy a poner a esperar porque algún otro me de signal (me notifique) y me voy a despertar.

Se soluciona el busy wait.

Siempre que me despierten tengo que verificar si se cumple la condición porque a veces me pueden dar signal sin que se cumpla.

Hay un estado atrás de un mutex asociado a una variable de condición.

Cuando la variable de condición da signal, toma ese mutex y me despierta dándome el acceso.

El que da signal puede despertar a uno (FIFO) o despertar a todos.

Cuando se despierta a todos hay race condition para obtener la variable. Por ello se le entrega el mutex al primero que se despierta.

Un semáforo es una condvar cuyo estado interno es un contador y el wait es un wait_while contador == 0 y el signal es tomar el mutex, sumar uno y hago notify.