SchedYield(), SchedYield_r()

Уступить исполнение другим потокам

Прототип:

#include <sys/neutrino.h>
int SchedYield( void );
int SchedYield_r( void );

Библиотека:

libc

Описание:

Данные вызовы ядра проверяют, готовы ли к исполнению другие потоки с тем же приоритетом, что и у вызывающего потока. В этом случае им передается управление, а вызывающий поток получает состояние READY и помещается в конец очереди данного приоритета. SchedYield() никогда не передает управление потоку с более низким приоритетом, а потоки с более высоким приоритетом получают управление в тот момент, когда становятся готовыми к исполнению. Данный вызов не влияет на потоки, работающие с приоритетами, отличными от приоритетов вызывающего потока.

Функции SchedYield() и SchedYield_r() идентичны за исключением способа возврата ошибок.


Note: Рекомендуется использовать функцию sched_yield() вместо прямых вызовов ядра.

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

Состояния блокировки:

Данные вызовы являются неблокируемыми. Однако, если другие потоки насодятся в стостоянии READY с тем же приоритетом, вызывающий поток помещается в конец очереди READY для этого приоритета.

Возвращаемое значение:

SchedYield()
Если возникла ошибка функция возвращает -1, код ошибки записывается в errno. Любое другое возвращенное значение считается успешным завершением.
SchedYield_r()
EOK возвращается при успешном завершении. Функция НЕ устанавливает errno. При возникновении ошибки функция возвращает один из представленных ниже кодов.

Классификация:

ЗОСРВ «Нейтрино»

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

sched_yield(), SchedGet(), SchedSet()




Предыдущий раздел: Описание API системной библиотеки