Re[8]: внутренняя реализация std::mutex?
От: okman Беларусь https://searchinform.ru/
Дата: 17.05.18 19:21
Оценка:
Здравствуйте, barney, Вы писали:

B>А такое можно реализовать легковесно в user mode не отдавая контекст ядру/планировщику?


Наверное, ничего лучше инструкции pause пока не придумали.

B>Любопытный вопрос. А какие практики используются вместо этого в ядре?


Конкретно ядро Windows перед захватом спинлока задирает IRQL до DISPATCH_LEVEL, это предотвращает вытеснение
потока планировщиком (хотя это не исключает, например, приход прерывания, в результате чего код все равно
будет временно вытеснен). Ну и вместо обычных спинлоков рекомендуется применять спинлоки с очередями на
стеке (in-stack queued spinlock) — там каждый поток вместо глобальной переменной теребит переменную у
себя в стеке, ну и гарантируется порядок захвата спинлока потоками (т.е. убирается проблема "starvation").

Про linux не в курсе, я его видел только "на картинках"

В режиме пользователя запретить вытеснение потока нельзя. Думаю, в режиме пользователя по этой
причине никаких спинлоков быть не должно.
Отредактировано 17.05.2018 19:22 okman . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.