Попросите Планировщика запланировать определенную тему - PullRequest
0 голосов
/ 03 июня 2011

В Linux, с потоками POSIX, есть возможность подсказки планировщику для планирования определенного потока.На самом деле сценарий таков, что у меня есть процесс, который является копией другого процесса.Для детерминированного выполнения процесс-последователь должен получить блокировки в том же порядке, что и процесс-лидер.

Так, например, например, в процессе лидера мьютекс а блокируется первым потоком 2, а затем 3 и 4. Последователь должен выполняться в том же порядке.Так что, если в повторителе поток 3 сначала встречается с мьютексом a, я хочу, чтобы поток 3 сказал планировщику, хорошо, я отказываюсь от своего временного интервала, пожалуйста, запланируйте поток 2 вместо.Я знаю, что это может быть достигнуто путем изменения планировщика, но я не хочу этого, я хочу иметь возможность управлять этим из программы пространства пользователя.

1 Ответ

0 голосов
/ 03 июня 2011

В любой системе, Linux, Windows POSIX или нет, если вам нужно задать такой вопрос, то я боюсь, что ваше приложение движется в темное место :(

Даже если поток 3 должен был выдать, скажем, с помощью sleep (0), прерывание сразу после этого может просто запланировать повторный запуск потока 3, прервав поток 2, или ОС может запустить поток 3 сразу на другом свободном ядре, и оно мог добраться до мьютекса первым.

Вы должны заставить ваше приложение работать правильно (может быть, не оптимально), независимо от алгоритмов планирования / диспетчеризации ОС. Даже если вы заставите свой проект работать на тестовом боксе, вам в конечном итоге придется тестировать свою систему на каждой комбинации ОС / оборудования, чтобы убедиться, что она по-прежнему работает без блокировок или работает неправильно.

Работать с алгоритмами планирования, приоритетами потоков и т. Д. Следует только для повышения производительности вашего приложения, а не для того, чтобы попытаться заставить его работать правильно или чтобы он не блокировался!

Rgds, Martin

...