Re[3]: внутренняя реализация std::mutex?
От: lpd Черногория  
Дата: 16.05.18 21:48
Оценка:
Здравствуйте, barney, Вы писали:

V>>Конкретная реализация целиком зависит от рантайма и на разных платформах реализована по разному.


B>Вот это и хочется изучить. Т.к не понятно, как именно мьютекс "усыпляет" поток, и кто потом его "просыпает"

B>как вообще работает эта машинерия.

Системный вызов futex работает в ядре, и усыпляет поток передачей управления функции schedule() планировщика процессов. Вообще планировщик вызывается или напрямую если процесс сам хочет освободить процессор, или из прерывания таймера. В зависимости от приоритетов процессов планировщик выбирает тот, которому положен следующий квант времени, и переключает на него контекст переключением таблицы страниц и загрузкой сохраненных значений регистров этого процесса.
Когда мьютекс освобождается, код futex помечает один из ждущих в очереди фьютекса потоков для исполнения, и планировщик при случае передаст ему управление.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Отредактировано 16.05.2018 21:58 lpd . Предыдущая версия . Еще …
Отредактировано 16.05.2018 21:51 lpd . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.