В политике планирования RR, что произойдет, если поток с низким приоритетом блокирует мьютекс и удаляется планировщиком, потому что ожидает еще один высокоприоритетный поток?Планирование потоков в unix
Будет ли он также выпускать блокировку, удерживаемую резьбой с низким приоритетом?
Например, рассмотрите 3 потока, выполняющихся в процессе с приоритетами 10,20 и 30 в политике планирования RR.
Теперь в данный момент времени ничтожный приоритет нитки 1 блокирует мьютексы и все еще выполняет среднее выполнение, в то время как поток с высоким приоритетом всплывает, а также ожидает мьютекс, удерживаемый нитью 1. Теперь поток 2 приходит к картине, которая также нуждается в тот же мьютекс, заблокированный нитью 1.
Насколько я знаю, согласно алгоритму планирования потоки, спящие или ожидающие мьютекс, семафор и т. д., удаляются, а другие, даже имеющие низкий приоритет, могут выполняться. Это верно? Если это так, в приведенном выше примере в конечном счете потоки с высоким приоритетом ожидают завершения потока с низким приоритетом, что не имеет никакого смысла. Как работает система, если на всех потоках сконструированы, как я уже говорил выше?
или приоритет потока должен быть установлен таким образом, чтобы приоритет приоритета не зависел от мьютекса с низким приоритетом?
Также может кто-нибудь объяснить мне, как планирование работает на уровне процесса? Как установить приоритет для процесса?
Проблема была «слишком много потоков, недостаточно ядер», но многоядерный оборот быстро решает эту проблему. Приоритеты потоков полезны, когда вам нужно выбрать, какой поток запускать, а не когда разработчики чипов задаются вопросом, может ли дополнительное ядро все же сделать что-то полезное. – MSalters