Семафори з множинним очікуванням

Можлива ситуація, коли процес може вибрати один з декількох шляхів подальшої роботи, але на кожному шляху він може бути заблокований закритим семафором. Розумно було б чекати звільнення будь-якого з семафорів і тільки тоді вибрати вільний шлях. Але як це зробити? Викликавши P (S) для одного з семафорів, процес приречений чекати звільнення саме цього семафора, а не будь-якого з наявних.

Життєва ситуація: покупець у супермаркеті, що вибирає, до якої з кас зайняти чергу. Добре б вгадати чергу, яка пройде швидше ...

Функція множинного очікування P (S1, S2, ... Sn) дозволяє вказати в якості параметрів декілька двійкових семафорів (або масив семафорів). Якщо хоча б один з семафорів вільний, функція займає його, в іншому випадку вона чекає звільнення будь-якого з семафорів.

Інший, не менш корисний варіант множинного очікування, це очікування моменту, коли всі зазначені семафори виявляться вільні. Це означає, що процес може працювати далі тільки в тому випадку, якщо одночасно виконані декілька умов, кожне з яких задане у вигляді двійкового семафора.