Предположение о машинной инструкции в смысле многопоточности - PullRequest
2 голосов
/ 11 апреля 2011

Можно ли предположить, что в каждой инструкции соблюдается атомарность?например,

mov dword ptr [eax], 0

Движение либо прошло успешно, либо не произошло.нет прерывания в середине выполненной инструкции.

Правильно ли мое предположение?

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

РЕДАКТИРОВАТЬ :
что ябеспокойство вызывает атомарность любой отдельной инструкции , а не специальной инструкции или ветви инструкций чтения-записи, я просто использую mov , например.

  1. В любое время, когда любое ядро ​​процессора выполняет инструкцию (сложение, перемещение, сдвиг и т. Д.), Может ли выполнение быть прервано?
  2. Есть ли неопределенное состояние в регистреили память ( размер машинного слова ).

Или какая самая маленькая единица, которую аппаратное обеспечение может обеспечить атомарность?

Ответы [ 2 ]

4 голосов
/ 11 апреля 2011

NO. Как правило, вы не должны предполагать, что инструкции являются атомарными. Что касается загрузки регистра с константой, почему это так или иначе имеет значение? Вы спрашиваете, может ли реестр оказаться в неопределенном состоянии? Ответ на этот вопрос - нет, иначе прерывания не сработают. Регистр будет загружен или не загружен с точки зрения программы, работающей на том же ядре.

Префикс LOCK в x86 используется для обеспечения атомарности.

РЕДАКТИРОВАТЬ: Вопрос был отредактирован, чтобы показать сохранение константы в памяти. И мой ответ по-прежнему, как правило, нет. Могут быть ситуации, когда память выровнена, и процессор гарантирует, что это будет атомарно, но я бы не стал полагаться на это, так как это может привести к неприятностям.

Также смотрите здесь: Чтение / запись int на компьютере x86 без блокировки

0 голосов
/ 11 апреля 2011

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

...