#multithreading #priority-inversion
#многопоточность #приоритет-инверсия
Вопрос:
В моем проекте применяется практика снижения приоритета потока при записи в файл и изменения его обратно после завершения операции записи. Это сделано потому, что операция записи файла может занять важные ресурсы, время и ограничить выполнение других важных потоков своими задачами.
Но представьте, что мой поток выполняется с приоритетом 30. Во время операции записи файла я меняю приоритет на 5. Не означает ли это, что другой поток, имеющий приоритет 10, может заблокировать мой поток, который обычно имеет приоритет 30.
Я понимаю, что это звучит как инверсия приоритета, но во время моего исследования сценарий инверсии приоритета обычно включает критический раздел, но мой сценарий его не включает. Наши приложения используют политику планирования RR, но операционная система (QNX) использует как RR, так и FIFO. Любая помощь приветствуется.
Комментарии:
1. для наглядности, чем больше число, тем выше prio?
Ответ №1:
Сценарий инверсии приоритета задается только тогда, когда ваша задача с prio 10 также хочет использовать файл, а задача с prio 5 блокирует ресурс. Или задача с prio 10 блокируется задачей с prio 5 любым другим способом.
Я понимаю, почему вы хотели бы снизить приоритет задачи, используя ввод-вывод для записи файла. Таким образом, вы не блокируете свою систему ожиданием операций ввода-вывода. Но если вы хотите предотвратить инверсию prio, вам необходимо увеличить приоритет, когда задача prio более высокого уровня хочет увеличить объем того же файла.