Разбираюсь в основах параллельного программирования. Натолкнулся на следующие понятия.
Регистр — это ячейка памяти, можно записать/прочитать. Бывают разными, но особо в контексте интересны регистры типов «много пишет, много читает» (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) — это значит, что регист можно привести за счет линеаризации к последовательному безопасному регистру.
Вопрос по атомарному и регулярному регистрам. В принципе можно «букварными» истинами, т.к. я в самом начале.
Спасибо заранее!