Я понимаю, что поток, который ждет условную переменную, атомически освобождает блокировку и переходит в режим сна, пока не пробуждается условным сигналом из другого потока (когда выполняется конкретное условие). После того, как он просыпается, он автоматически восстанавливает блокировку (как-то волшебно) и обновляет по мере необходимости и разблокирует критический раздел.
Было бы здорово, если бы кто-нибудь мог объяснить, как эта процедура conditional_wait() реализована в ядре и уровне аппаратного обеспечения/сборки?
Как блокировка освобождается и повторно используется атомарно? Как это обеспечивает ядро?
Что здесь сон здесь означает? Означает ли это, что контекст переключается на другой процесс/поток?
Во время спящего потока, как этот поток пробуждается с помощью сигнализации, реализованный на уровне ядра, и если для этих механизмов предусмотрена какая-либо аппаратная поддержка?
Edit:
Кажется, что "futex" - это парень, который управляет этим сигналом ожидания/сигнала. Чтобы сузить мой вопрос: Как система futex вызывается для ожидания и уведомления переменных условия реализована/работает на низком уровне?