Реализация мьютекса ожидания в пользовательских потоках

Как ожидание блокировки реализовано в пользовательских потоках?

Скажем, поток A пытается получить блокировку, которая используется другим потоком B. После того, как A понял, что блокировка заблокирована другим потоком, что именно он делает? Как это останавливает его собственное исполнение? кто бежит после остановки?

Я читал, что в потоках ядра поток может вызвать системный вызов, который приостанавливает его и помещает в очередь ожидания. Но в пользовательских потоках система не знает о потоках, поэтому должна ли быть очередь, управляемая пользователем?

1 ответ

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

Другие вопросы по тегам