Как команда паузы x86 работает в спин-блокировке * и * может ли она использоваться в других сценариях?

команда паузы обычно используется в цикле тестирования спин-блокировки , когда спин-блокировка принадлежит другому потоку, для смягчения замкнутого цикла. Говорят, что это эквивалентно некоторым инструкциям NOP. Может кто-нибудь сказать мне, как именно это работает для оптимизации спин-блокировки? Мне кажется, что даже инструкции NOP - пустая трата времени процессора. Уменьшат ли они использование ЦП?

Другой вопрос, могу ли я использовать инструкцию паузы для других подобных целей. Например, у меня есть занятый поток, который продолжает сканировать некоторые места (например, очередь) для получения новых узлов; однако иногда очередь пуста, и поток тратит впустую время процессора. засыпать поток и разбудить его другими потоками может быть вариантом, однако поток критичен, поэтому я не не хочу, чтобы он уснул. Могу ли я приостановить работу инструкции по снижению нагрузки на ЦП? В настоящее время он использует 100% ЦП физического ядра?

Спасибо.

37
задан Infinite 18 January 2011 в 15:09
поделиться