Я не могу думать ни о каких обстоятельствах, когда ты действительно хочешь занятого ожидания. Оживленное ожидание просто потребляет процессорное время, ничего не достигая. Это не означает, что алгоритмы «занятого ожидания» бесполезны (они есть), но часть «занятого ожидания» не является желаемым свойством, это просто необходимое следствие свойства, которое является желаемым .
Алгоритм блокировки Петерсона и алгоритм пекарни Лампорта являются в основном просто реализациями концепции мьютекса. Средства ОС предоставляют реализации одной и той же концепции, но с разными компромиссами.
«Идеальная» реализация мьютекса будет иметь «нулевые накладные расходы» - получение блокировки мьютекса вообще не займет никакого времени, если он в данный момент не принадлежит, ожидающий поток разбудит тот момент, когда предыдущий владелец снял блокировку, и в то же время ожидающий поток не будет потреблять процессорное время.
Алгоритм «занятого ожидания» или «спин-блокировки» заменяет процессорное время, используемое потоком ожидания, на уменьшенное время пробуждения. При условии, что поток в настоящее время запланирован на процессоре, занятый официант проснется так же быстро, как процессор может передать необходимые данные для получения блокировки и синхронизации потоков, но пока он ожидает, он будет использовать максимальное выделение процессорного времени. Если количество потоков превышает количество доступных процессоров, это может занять время у потока, которому в настоящее время принадлежит мьютекс, что увеличивает время ожидания. Однако в некоторых случаях низкая задержка между разблокировкой и блокировкой стоит компромисса.
С другой стороны, «блокирующий» мьютекс, использующий средства ОС для перевода ожидающего потока в спящий режим, имеет другой компромисс. В этом случае время между разблокировкой мьютекса и ожидающим потоком, получающим его, может быть довольно большим, возможно, в несколько сотен раз больше, чем при использовании алгоритма ожидания занятости. Преимущество заключается в том, что ожидающий поток действительно не тратит время процессора во время ожидания, поэтому ОС может планировать другую работу во время ожидания потока. Таким образом, это может потенциально сократить общее время ожидания и увеличить общую пропускную способность системы.
Некоторые реализации мьютекса используют комбинацию ожидания занятости и блокировки: они заняты ожиданием в течение короткого времени, а затем переключаются на блокировку, если блокировка не может быть получена в течение короткого времени. Это дает преимущества быстрого пробуждения, если блокировка снята вскоре после того, как поток начал ждать, и при этом не потребляет процессорного времени, если поток должен ждать долго. Он также имеет недостатки высокой загрузки процессора для коротких ожиданий и медленного включения для длинных ожиданий.