2014-02-13 4 views
4

У меня есть поток в реальном времени в Linux (3.4). При определенных условиях я хочу, чтобы он отказался от управления другими потоками с одинаковым приоритетом, даже если он не закончил использовать свой текущий временной интервал. Я думал, используя следующий код:уступая от ядра linux

if (condition) { 
    resched_task(); 
    cond_resched(); 
} 

однако, я не вижу никого другого в коде делает это, заставляет меня думать, что есть какой-то другой (лучше?) Способ сделать это. Есть ли стандартный способ сделать это?

ответ

6

Вы можете использовать функцию sched_yield(), чтобы дать остальную часть вашего времени, as discussed here.

sched_yield() заставляет вызывающий поток отказываться от ЦП. Поток перемещается в конец очереди для его статического приоритета, и новый поток запускается.

+0

Спасибо. Вы не знали бы разницу между sched_yield() и yield(), не так ли? – John

+0

@John О какой функции yield() вы говорите? Я не знаю, кто называется просто 'yield()', извините. – TypeIA

+0

В core.c (строка 5029) существует функция, называемая yield. В верхней части функции есть большое предупреждение: «Никогда не используйте эту функцию, есть вероятность 99%, что вы делаете это неправильно». ... В итоге она вызывает вызов sys_sched_yield(), из-за чего я немного устал. – John

0

Вопрос звучит так, как будто он спрашивает о программировании ядра, но принятый ответ представляет собой пользовательский режим API sched_yield(). Я думаю, что ядро ​​ответит на этот вопрос - расписание()

+2

' schedule() 'не помещает вас в конец runqueue, если время не вверх, а это значит, что вы снова просыпаетесь. 'yield()' отталкивает вас назад, позволяя запустить следующий процесс. После некоторого анализа мы обнаружили, что 'yield()' на самом деле был правильным, несмотря на комментарий выше него. (обратите внимание - это относится только к RR runqueues) – John

+0

@John Вы уверены, что расписание() не помещает его в конец очереди? какова его цель. Мы отказываемся от процессора, чтобы сразу проснуться? – Karthik

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