thrd_yield
|
Определено в заголовочном файле
<threads.h>
|
||
|
void
thrd_yield
(
void
)
;
|
(начиная с C11) | |
Предоставляет подсказку реализации о необходимости перепланировать выполнение потоков, позволяя выполняться другим потокам.
Содержание |
Параметры
(нет)
Возвращаемое значение
(нет)
Примечания
Точное поведение этой функции зависит от реализации, в частности от механики планировщика ОС и состояния системы. Например, планировщик реального времени по принципу "первым пришел - первым обслужен" (
SCHED_FIFO
в Linux) приостановит текущий поток и поместит его в конец очереди потоков с одинаковым приоритетом, готовых к выполнению, и если нет других потоков с тем же приоритетом,
yield
не оказывает никакого эффекта.
Эквивалентом этой функции в POSIX является
sched_yield
.
Пример
#include <stdio.h> #include <time.h> #include <threads.h> // utility function: difference between timespecs in microseconds double usdiff(struct timespec s, struct timespec e) { double sdiff = difftime(e.tv_sec, s.tv_sec); long nsdiff = e.tv_nsec - s.tv_nsec; if(nsdiff < 0) return 1000000*(sdiff-1) + (1000000000L+nsdiff)/1000.0; else return 1000000*(sdiff) + nsdiff/1000.0; } // busy wait while yielding void sleep_100us() { struct timespec start, end; timespec_get(&start, TIME_UTC); do { thrd_yield(); timespec_get(&end, TIME_UTC); } while(usdiff(start, end) < 100.0); } int main() { struct timespec start, end; timespec_get(&start, TIME_UTC); sleep_100us(); timespec_get(&end, TIME_UTC); printf("Waited for %.3f us\n", usdiff(start, end)); }
Возможный вывод:
Waited for 100.344 us
Ссылки
- Стандарт C17 (ISO/IEC 9899:2018):
-
- 7.26.5.8 Функция thrd_yield (стр: 281)
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 7.26.5.8 Функция thrd_yield (стр: 385)
Смотрите также
|
(C11)
|
приостанавливает выполнение вызывающего потока на заданный период времени
(функция) |
|
C++ documentation
для
yield
|
|