В чем разница между безопасными, регулярными и атомарными (safe, regular, atomic) регистрами?

Разбираюсь в основах параллельного программирования. Натолкнулся на следующие понятия.


Регистр — это ячейка памяти, можно записать/прочитать. Бывают разными, но особо в контексте интересны регистры типов «много пишет, много читает» (multi reader, multi writer — MRMW) и «один пишет, много читает» (multi reader, single writer — MRSW). (Здесь все понятно, но прошу поправить, если не то). Служат для создания замков (locks), взаимных исключений (mutex), «разруливания» прочих спорных ситуаций (консенсус, например).


Регистр может быть:
  • безопасным (safe register) — значит, что запись и чтение разными потоками не перекрывают друг друга. Тут более менее понятно.
  • регулярным (regular register) — (тут начинается...) отличен тем, что возвращает старое значение, когда операции чтения и записи не перекрываются и новое или старое, если перекрываются.

    Примерно схема:


    поток1.пишет(0)________поток1.пишет(1)______________>

    ________________поток2.читает(1)__поток2.читает(0)________время_____>


    Я не очень понял, как там вообще можно потоку2 прочитать 0, если операция записи 1 уже прошла (а она прошла, т.к. это подтверждает, что регулярные регистры не линеаризуемы… вроде б...).

  • атомарным (atomic register) — это значит, что регист можно привести за счет линеаризации к последовательному безопасному регистру.


Вопрос по атомарному и регулярному регистрам. В принципе можно «букварными» истинами, т.к. я в самом начале.


Спасибо заранее!
  • Вопрос задан
  • 3619 просмотров
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы