lpd>Системный вызов futex работает в ядре, и усыпляет поток передачей управления функции schedule() планировщика процессов. Вообще планировщик вызывается или напрямую если процесс сам хочет освободить процессор, или из прерывания таймера. В зависимости от приоритетов процессов планировщик выбирает тот, которому положен следующий квант времени, и переключает на него контекст переключением таблицы страниц и загрузкой сохраненных значений регистров этого процесса.
Ага, schedule() вызывается и по прерыванию таймером работающего потока, и в futex, так?
Т.е должен быть механизм, который отличает поток, ждущий futex от работающего потока, квант времени которого истек.
Иначе нет строгих гарантий что futex поток не проснется "внезапно" если планировщику вдруг так вздумается.
lpd>Когда мьютекс освобождается, код futex помечает один из ждущих в очереди фьютекса потоков для исполнения, и планировщик при случае передаст ему управление.
Т.е есть какой то системный condition variable в ядре, по которому поток "вешается" спать, до наступления сигнала ядра,
которое, например возникает когда другой поток освобождает тот же мьютекс?