2013-07-03 3 views
0

Две задачи с различным приоритетом ждут на одном и том же семафоре, как только семафор получает освобожденную задачу с высоким приоритетом, получает запланированные? или его случайный?, я использую политику планировщика SCHED_RR.Множественные задачи, ожидающие на одном и том же семафоре

+0

Какой семафор? Как он освобождается? –

+0

Это двоичный семафор. Он выпущен третьей задачей. – digitizedx

+0

Вы используете патч PREEMPT-RT? –

ответ

1

Вообще говоря, я не знаю правила, которое ждет задача ожидания, когда семафор выпущен, так что это зависит от выбора планировщика. «Приоритет» задач, вероятно, имеет значение только для планировщика в случае обычного механизма планирования, а не для синхронизации из-за семафоров.

+0

Поэтому я не могу предположить, что моя задача с высоким приоритетом будет работать, когда выйдет семафор. Каким будет поведение планировщика ядра Linux? Он случайным образом подбирает задание, которое ожидало или похоже на то, что оно заберет задачу, которая сначала попала в очередь? – digitizedx

+0

Неопределенный. Вы можете попробовать, но ожидать изменений в более поздних версиях. Если вам нужно полагаться на поведение, используйте другую технику, а не только семафоры и приоритеты. – Alfe

1

Если вы используете SCHED_RR, тогда планировщик запускает задачи с наивысшим приоритетом и запускает такие задачи в первую очередь. Если есть задача с SCHED_RR и она в состоянии TASK_RUNNING, она будет работать.

На однопроцессорной системе, если существует задачи с SCHED_RR и TASK_RUNNING тогда только этой задачей будет выполняться. Но в многоядерной системе задача с более низким приоритетом может быть запланирована на другом процессоре.

На мой взгляд, задача с более высоким приоритетом и SCHED_RR запланирована первыми, но нет никакой гарантии, что эта задача сначала получит семафор, потому что этот процессор может выполнять более важную работу, например, прерывания дескриптора.

Опять же, это мое единственное мнение, и я довольно новичок в ядре linux. Было бы здорово, если бы кто-нибудь более опытный, чтобы его одобрить.


Edit:

планировщик не имеет значения для семафора. Он просто пробуждает одну задачу, независимо от ее приоритета.

Итак, вы можете получить блокировку сначала, если ваша задача сначала попытается получить блокировку (это сложно и небезопасно). Или вы можете самостоятельно управлять семафорной очередью.

Смежные вопросы