задействует ли команда atomi c ядро - PullRequest
1 голос
/ 11 февраля 2020

Я читаю эту ссылку , чтобы узнать о futex из Linux. Вот что-то, чего я не понимаю.

Чтобы получить блокировку, можно использовать команду проверки и установки atomi c (например, cmpxchg ()) для проверки 0 и установите в 1. В этом случае блокирующий поток получает блокировку без участия ядра (и ядро ​​не знает, что этот фьютекс существует). Когда следующий поток попытается получить блокировку, проверка на ноль не удастся, и ядро ​​должно быть задействовано.

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

Я всегда думаю, что инструкция Atomi c, такая как test-and-set, всегда включает в себя ядро.

Так почему же первый раз при получении блокировки не будет связано ядро? В частности, инструкция atomi c должна включать или может включать ядро?

1 Ответ

1 голос
/ 11 февраля 2020

Команда проверки и установки атома c - это обычная инструкция, выполняемая кодом пользователя, как обычно. Оно не включает ядро.

Futexes обеспечивают эффективный способ выполнения операций блокировки и разблокировки без вовлечения ядра в быстрые пути. Однако, если процесс должен быть переведен в режим ожидания (для ожидания получения блокировки) или пробужден (потому что он не может получить блокировку, но теперь может), тогда необходимо задействовать ядро ​​для выполнения операций планирования.

...