Процессоры Intel (эффективно) отключают прерывания во время выполнения ВСЕХ команд - прерывания могут доставляться только между инструкциями. Теперь выполнение инструкции может перекрываться во времени (путая то, что подразумевается под между ), но, как работает механизм прерывания, каждая инструкция до прерывания будет завершена, в то время как каждая инструкция после прерывания будет отменена ( не имеют никакого эффекта).
Обратите внимание, что только потому, что прерывание не может быть доставлено в середине инструкции, это не делает инструкцию atomi c, если инструкция содержит более один доступ к памяти (например, inc mem
, который эффективно выполняет чтение-изменение-запись), поскольку другие процессоры или другие устройства, подключенные к шине, могут изменять расположение между ними. Для этого и нужен префикс lock
- он гарантирует, что с этой ячейкой памяти больше ничего не случится во время выполнения инструкции.