Схема тонкой блокировки предполагает, что слово метки заблокированного объекта указывает на слот стека фрейма, который заблокировал этот объект.Этот слот стека хранит исходный заголовок объекта (он же смещенный заголовок).
Unlocked:
[ orig_header | 001 ] | Stack frame |
| |
Locked: | |
[ stack_ptr | 000 ] | |
| |-------------|
--------------------->| orig_header |
|-------------|
| |
| |
-------------
Очевидно, что слот стека несет больше информации, чем идентификатор потока, так как вы можете получить идентификатор потока из слота стека, но не наоборот.
В отличие от смещенной схемы, где операция разблокировки фактически запрещена, тонкие блокировки должны восстанавливать исходный заголовок, когда объект разблокирован.Это становится очень простым, поскольку слово метки уже указывает на ячейку стека с исходным значением.