На многоядерном x86 действительно ли БЛОКИРОВКА необходима как префикс для XCHG?

Если mem местоположение общей памяти, сделайте мне нужно:

XCHG EAX,mem

или:

LOCK XCHG EAX,mem

сделать обмен атомарно?

Поиск с помощью Google этого приводит и к да и к никаким ответам. Кто-либо знает это окончательно?

19
задан Bernard 30 June 2010 в 13:46
поделиться

3 ответа

Согласно 80386 Руководству по эксплуатации , БЛОКИРОВКА ШИНЫ устанавливается на время обмена. Префикс LOCK не имеет приоритета для этой операции, как и значение уровня привилегий ввода-вывода .

Я предлагаю, поскольку в документации указано, что BUS LOCK утверждается независимо от наличия префикса LOCK , LOCK XCHG EAX, mem иначе безопасно. В случае сомнений добавьте LOCK .

2
ответ дан 30 November 2019 в 03:24
поделиться

Документация Intel кажется довольно ясной, что она избыточна.

Архитектура Intel® IA-32 Руководство разработчика программного обеспечения Том 3А: Руководство по системному программированию, часть 1

7.1.2.1 гласит:

Операции, при выполнении которых процессор автоматически следует семантике LOCK, являются следующими: следует:

  • При выполнении инструкции XCHG, которая обращается к памяти.

Аналогичным образом

Архитектуры Intel® 64 и IA-32 Руководство разработчика программного обеспечения Том 2B: Ссылка на набор команд, N-Z

XCHG:

Если ссылка на операнд памяти, автоматически включается протокол блокировки процессора. реализуется на время операции обмена, независимо от наличия или отсутствия префикса LOCK или значения IOPL.

Обратите внимание, что это на самом деле не означает, что сигнал LOCK # утверждается независимо от того, используется префикс LOCK или нет, 7.1.4 описывает, как на более поздних процессорах семантика блокировки сохраняется без LOCK #, если область памяти кэшируется. Умно и определенно выше моей головы.

25
ответ дан 30 November 2019 в 03:24
поделиться

Начиная с 386 дней, xchg будет утверждать сигнал блокировки независимо от того, поставили ли вы на него префикс блокировки. Документация Intel довольно четко описывает это в справочнике по набору инструкций IA-32 N-Z.

12
ответ дан 30 November 2019 в 03:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: