Информация об изменениях

Сообщение Re[3]: внутренняя реализация std::mutex? от 16.05.2018 21:48

Изменено 16.05.2018 21:51 lpd

Re[3]: внутренняя реализация std::mutex?
Здравствуйте, barney, Вы писали:

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


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

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

Системный вызов futex работает в ядре, и усыпляет поток передачей управления функции schedule() планировщика процессов. Вообще планировщик вызывается или напрямую если процесс сам хочет освободить процессор, или из прерывания таймера. В зависимости от приоритетов процессов планировщик выбирает тот, которому положен следующий квант времени, и переключает на него контекст переключением таблицы страниц и загрузкой сохраненных значений регистров этого процесса.
Re[3]: внутренняя реализация std::mutex?
Здравствуйте, barney, Вы писали:

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


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

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

Системный вызов futex работает в ядре, и усыпляет поток передачей управления функции schedule() планировщика процессов. Вообще планировщик вызывается или напрямую если процесс сам хочет освободить процессор, или из прерывания таймера. В зависимости от приоритетов процессов планировщик выбирает тот, которому положен следующий квант времени, и переключает на него контекст переключением таблицы страниц и загрузкой сохраненных значений регистров этого процесса.
Когда мьютекс освобождается, код futex помечает один из ждущих в очереди потоков для исполнения, и планировщик при случае передаст ему управление.