sched_yield()

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

Прототип:

#include <sched.h>
int sched_yield( void );

Библиотека:

libc

Описание:

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

Функция sched_yield() является POSIX-совместимой функцией, которая выполняет вызов ядра SchedYield().

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

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

0.

Примеры:

#include <stdio.h>
#include <stdlib.h>
#include <sched.h>
int main( void )
{
int i;
for ( ; ; )
{
/* Process something... */
for ( i = 0 ; i < 1000 ; ++i )
fun();
/* Yield to anyone else at the same priority */
sched_yield();
}
return (EXIT_SUCCESS); /* Never reached */
}
int fun()
{
int i;
for ( i = 0 ; i < 10 ; ++i )
i += i;
return( i );
}

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

POSIX 1003.1 Process Scheduling, Threads

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

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

getprio(), sched_getparam(), sched_get_priority_max(), sched_get_priority_min(), sched_getscheduler(), sched_setparam(), sched_setscheduler(), SchedYield(), setprio(), sleep()




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