когда регистр переключается между режимом ядра и режимом пользователя для синхронизированного ключевого слова в JAVA - PullRequest
0 голосов
/ 06 января 2020

Когда синхронизированное ключевое слово в JAVA использует мьютекс, если только один поток борется за блокировку, это все равно вызывает переключение между режимом ядра и режимом пользователя?

Переключение между режимом ядра и пользователем Режим не только происходит, когда потоки уведомляются или блокируются. Это происходит всякий раз, когда возникает конфликт блокировки?

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

1 Ответ

2 голосов
/ 06 января 2020

Давайте сначала разберемся с вашей терминологией. Если один поток пытается получить мьютекс, а мьютекс в настоящее время не удерживается другим потоком, то нет никакого конфликта. Конфликт возникает только в том случае, если задействованы два или более потоков.

(я также предполагаю, что «режим ядра» означает, что вы переключаетесь в привилегированный режим команд, используемый ядром ОС, и / или перезагружаете контекст виртуальной памяти так что процессор может получить доступ к структурам данных ядра. Точные детали не имеют значения ...)

Итак, вот случаи:

  1. Нет споров: поток пытается получить поток, когда никакой другой поток не держит его. В этом случае мьютекс получается без переключения в режим ядра.

    Это включает в себя подслучайный случай, когда поток пытается получить мьютекс, который он уже содержит. Это не конфликт.

  2. Конфликт: поток пытается получить поток, когда его удерживает какой-то другой поток. В этом случае есть две возможности.

    • Если используются спин-блокировки, то поток, пытающийся получить поток, может опросить слово блокировки за период, пытаясь приобрести его. Если это удается, то пользовательский режим отсутствует -> переключатель режима ядра.

    • Если спин-блокировки не используются (или если вы вращаетесь слишком долго), то поток переключается в режим ядра так что текущий поток может быть переведен в режим удержания, а другой поток запланирован ОС.

...