Почему смещённая блокировка использует другое слово метки с легкой блокировкой - PullRequest
0 голосов
/ 28 октября 2018

Когда одна нить удерживает защелку.Слово пометки является идентификатором нити.Но для облегченной блокировки слово метки является указателем стека на поток, почему бы не сохранить идентификатор потока до сих пор?

1 Ответ

0 голосов
/ 29 октября 2018

Схема тонкой блокировки предполагает, что слово метки заблокированного объекта указывает на слот стека фрейма, который заблокировал этот объект.Этот слот стека хранит исходный заголовок объекта (он же смещенный заголовок).

    Unlocked:
    [ orig_header | 001 ]       | Stack frame |
                                |             |
    Locked:                     |             |
    [ stack_ptr   | 000 ]       |             |
         |                      |-------------|
          --------------------->| orig_header |
                                |-------------|
                                |             |
                                |             |
                                 -------------

Очевидно, что слот стека несет больше информации, чем идентификатор потока, так как вы можете получить идентификатор потока из слота стека, но не наоборот.

В отличие от смещенной схемы, где операция разблокировки фактически запрещена, тонкие блокировки должны восстанавливать исходный заголовок, когда объект разблокирован.Это становится очень простым, поскольку слово метки уже указывает на ячейку стека с исходным значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...