5
  1. Насколько я знаю, атомарная инструкция гарантирует, что когда она выполняется, никакие другие потоки не могут изменить эти данные (как критический раздел). Я прав?
  2. Как это реализовано в оборудовании?
  3. Как оборудование гарантирует это? (Аппаратная часть генерирует три микро инструкции внутри: разблокировать, изменить и заблокировать?)
  4. В чем разница между использованием мьютекса и атомарной инструкции? Разница только в количестве инструкций (1 инструкция для атомарных, несколько инструкций для нормального мьютекса)?
  5. Разве это количество различий в инструкциях (1 против многих) гарантирует правильность (например, использование мьютекса) и согласованность?

2 ответа2

4

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

Когда у вас есть несколько процессоров, тема становится сложной, особенно с учетом эффектов кэша. Такие протоколы, как MSI и производные MESI, MOSI, MOESI, подтверждают это в современных процессорах Intel.

В WikiPedia также есть хорошее резюме в Cache Coherence .

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

3

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .