отличается между Cmpxchg и BTR BTS - PullRequest
2 голосов
/ 04 апреля 2011

btr,bts инструкция проста и может заблокировать ресурс общего ресурса.

Почему существует инструкция cmpxchg? Чем отличаются эти две инструкции?

Ответы [ 2 ]

3 голосов
/ 04 апреля 2011

IIRC (это было давно) lock btr дороже, чем cmpxchg, который был разработан, чтобы автоматически блокировать шину на атомарность и сделать это как можно быстрее. (В частности, lock INSTR удерживает блокировку шины для всего цикла инструкций и делает полную аннулирование, но микрокод для cmpxchg блокирует и делает недействительным только тогда, когда это абсолютно необходимо для обеспечения максимально быстрого примитива синхронизации.)

(Изменить: он также включает в себя необычные (пользовательские) стратегии без блокировок, для этого сообщения .

CMPXCHG [memaddr], reg сравнивает область памяти с EAX (или AX, или AL); если они одинаковы, он записывает исходный операнд в память место нахождения. Это, очевидно, можно использовать так же, как XCHG, но это может быть использован и другим очень интересным способом, без блокировки синхронизации.

Предположим, у вас есть процесс, который обновляет общую структуру данных. к обеспечить атомарность, он генерирует частную обновленную копию данных состав; когда это закончено, это атомно обновляет единственный указатель который раньше указывал на старую структуру данных, так что теперь она указывает на новая структура данных.

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

Процесс просто атомарно сравнивает указатель со значением, которое он имел когда он начал свою работу, и если да, то указатель указывает на новый структура данных. Если какой-то другой процесс обновил структуру данных в то же время сравнение не удастся, и обмен не будет бывает. В этом случае процесс должен начаться заново с обновленная структура данных.

(Это по сути примитивная форма программной транзакционной памяти .)

1 голос
/ 04 апреля 2011

BTR и BTS работают на битовом уровне, где CMPXCHG работает с более широким типом данных (обычно 32, 64 или 128 битов одновременно).Они также работают по-разному, руководства для разработчиков Intel дают хорошее представление о том, как они работают.Также может помочь заметить, что некоторые процессоры могли реализовывать BTR и BTS плохо (из-за того, что они не используются так широко), что делает CMPXCHG лучшим вариантом для высокопроизводительных блокировок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...