TTAS (# 2) - хорошая практика.«Скрываться» и ждать «возможности» перед выполнением CAS
является обычной практикой в классах Java и .NET.С учетом вышесказанного, cmpxchg
получил довольно много оптимизаций за последние несколько лет, так что вполне возможно, что вы получите почти идентичные результаты на последнем поколении процессоров.
Что вы должны попробовать воднако в обоих случаях при вращении используется экспоненциальный откат .
Обновление
@ GJ: Вы должны найти ещеактуальная документация на сайте Intel .Обратите внимание на параграф о незапирании шины с 486 и сравнительную таблицу xchg
и cmpxchg
, которая показывает, что они практически идентичны.
Вращение по чтению против инструкции locked
все еще будет хорошей идеей, чтобы избежать некоторого раздора при получении строки кэша в монопольном режиме.(Так что TTAS.)
Однако это даст полезный выигрыш только в том случае, если вы реализуете, например, экспоненциальный откат, даже через некоторое время уступая ЦП.
Различия между TTAS и TAS, или без отката, будут меньше, если вы используете один современный многоядерный процессор с общим кешем L3 между ядрами, и станут более заметными, если вы используетемногосекционный - например, сервер - компьютер или многоядерный процессор, который не имеет общего кэша между ядрами.Они также будут отличаться в зависимости от количества разногласий.(Т.е. при небольшой нагрузке разница между TTAS / TAS будет меньше.)