Я читаю эту ссылку , чтобы узнать о futex
из Linux. Вот что-то, чего я не понимаю.
Чтобы получить блокировку, можно использовать команду проверки и установки atomi c (например, cmpxchg ()) для проверки 0 и установите в 1. В этом случае блокирующий поток получает блокировку без участия ядра (и ядро не знает, что этот фьютекс существует). Когда следующий поток попытается получить блокировку, проверка на ноль не удастся, и ядро должно быть задействовано.
Я не совсем понимаю, почему «получает блокировку без участия ядра».
Я всегда думаю, что инструкция Atomi c, такая как test-and-set
, всегда включает в себя ядро.
Так почему же первый раз при получении блокировки не будет связано ядро? В частности, инструкция atomi c должна включать или может включать ядро?