Уступить исполнение другим потокам
#include <sys/neutrino.h>int SchedYield( void );int SchedYield_r( void );
libc
Данные вызовы ядра проверяют, готовы ли к исполнению другие потоки с тем же приоритетом, что и у вызывающего потока. В этом случае им передается управление, а вызывающий поток получает состояние READY и помещается в конец очереди данного приоритета. SchedYield() никогда не передает управление потоку с более низким приоритетом, а потоки с более высоким приоритетом получают управление в тот момент, когда становятся готовыми к исполнению. Данный вызов не влияет на потоки, работающие с приоритетами, отличными от приоритетов вызывающего потока.
Функции SchedYield() и SchedYield_r() идентичны за исключением способа возврата ошибок.
Следует избегать циклов активного ожидания с использованием SchedYield() для кванта времени. Если это неизбежно, SchedYield() позволит несколько снизить нагрузку на систему при текущем уровне приоритета. Следует обратить внимание на то, что программа, которая вызывает SchedYield() в цикле существенно расходует ресуры ядра, что незначительно повлияет на задержку обработки прерываний.
Данные вызовы являются неблокируемыми. Однако, если другие потоки насодятся в стостоянии READY с тем же приоритетом, вызывающий поток помещается в конец очереди READY для этого приоритета.
-1
, код ошибки записывается в errno. Любое другое возвращенное значение считается успешным завершением.EOK
возвращается при успешном завершении. Функция НЕ устанавливает errno. При возникновении ошибки функция возвращает один из представленных ниже кодов.ЗОСРВ «Нейтрино»
sched_yield(), SchedGet(), SchedSet()
Предыдущий раздел: Описание API системной библиотеки