Hola:
Las únicas primitivas sobre conditions que vemos en el curso son signal y wait. Como vos decis, alcanza con mantener una bandera o un contador para implementar la operación nonEmpty. En el capítulo 5 del Silberschatz se presentan los conceptos básicos y primitivas de monitores que vemos en el curso.
Saludos,
Santiago.