Что делает asm ( "пауза" ) и зачем его использовать

Я видел asm ( "pause" ) в коде других людей, и мне интересно, что он делает. Код компилируется g++ в Linux.

Эта строка находится в цикле, который в другом потоке, который постоянно проверяет, происходит ли обновление. Я подозреваю, что это заставляет программу останавливаться немного раньше, чем опросить, но мне интересно (1) Правильно ли я предполагаю (2) почему нужно приостановить? У машины, на которой мы запускаем код, есть много процессоров, и я, как ничто, полностью просто буду опробовать его.

Ответ 1

В принципе, это называется циклом вращения или ожиданным ожиданием. Он будет потреблять столько ресурсов ЦП, сколько может. Это снижает мощность процессора и увеличивает потребление энергии.

Поставив инструкцию pause, вы намекаете на процессор, что "это спиновый цикл". Это заставляет процессор не быть слишком умным, чтобы делать ненужные прогнозы (оптимизации). Кроме того, он освобождает процессорное время для использования в других случаях (например, Hyperthreading).