Как сверхбыстрый путь в смещенной блокировке позволяет избежать устаревшего слова состояния? - PullRequest
0 голосов
/ 14 марта 2019

Я читаю статью о предвзятом блокировании .

In Собственные слова Дейва Дайса :

Однажды предвзятоПоток может впоследствии заблокировать и разблокировать объект, не прибегая к дорогостоящим атомарным инструкциям.

Если мы посмотрим на часть реализации, где поток id повторно получает блокировку, уже смещенную к id:

Re-acquisition

Чтобы повторно получить блокировку по сверхскоростному пути, мы в конечном итоге вернемся на строку 8. Есть сравнение исвоп (не показан), используемый при настройке смещения, но путь повторного сбора данных (где блокировка уже имеет правильное смещение) полностью свободен от атомарных операций.

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

Например, если поток Асначала что-то сохраняет в местоположении L, и затем мы хотим гарантировать, что последующее чтение из L в потоке B увидит новое значение, затем A должно выполнить атомарное хранение, а B должно выполнить атомарную загрузку.

Inбумага, у нас есть атомарное хранилище (CAS) при назначении смещения, но нет атомарного чтения, чтобы проверить смещение.

Так что мешает потоку видеть слово состояния "устарела" настроки 4 и 7 реализации?

Спасибо :)) 1032 *

...