Уступить исполнение другим потокам с одинаковым приоритетом
#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 системной библиотеки