Атомность в параллельном шинном процессоре

Как мы знаем, атомарные действия не могут чередоваться, поэтому их можно использовать, не опасаясь вмешательства потоков. Например, в 32-разрядной ОС "x = 3" рассматривается как элементарная операция "в целом", но доступ к памяти обычно занимает более одного такта, скажем, 3 цикла. Так что вот случай;

Предполагая, что у нас есть несколько параллельных шин данных и адресов, и поток A пытается установить "x = 3", нет никакого шанса для другого потока, скажем, потока B, получить доступ к той же ячейке памяти во втором цикле (в то время как поток A в середине операции записи). Как атомность будет сохранена?

Надеюсь, мне удалось прояснить ситуацию.

Спасибо

1 ответ

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

Проблемы возникают, когда вы делаете read-modify-write Операции, поскольку они включают (по крайней мере) две шинные транзакции, и, таким образом, такие операции могут привести к гонке между ядрами (потоками). Эти случаи решаются с помощью специальных кодов операций (префиксов), которые утверждают сигнал блокировки шины на протяжении всей следующей команды или специальных инструкций, которые выполняют всю работу

Другие вопросы по тегам