thrd_yield
From cppreference.net
|
헤더 파일에 정의됨
<threads.h>
|
||
|
void
thrd_yield
(
void
)
;
|
(C11 이후) | |
스레드 실행을 재조정하여 다른 스레드들이 실행될 수 있도록 구현에 힌트를 제공합니다.
목차 |
매개변수
(없음)
반환값
(없음)
참고 사항
이 함수의 정확한 동작은 구현에 따라 달라지며, 특히 사용 중인 OS 스케줄러의 메커니즘과 시스템 상태에 영향을 받습니다. 예를 들어, 선입선출 실시간 스케줄러(
SCHED_FIFO
리눅스에서)는 현재 스레드를 일시 중단하고 실행 준비가 된 동일 우선순위 스레드 큐의 맨 뒤로 이동시키며, 동일한 우선순위의 다른 스레드가 없는 경우
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 함수 (p: 281)
- C11 표준 (ISO/IEC 9899:2011):
-
- 7.26.5.8 The thrd_yield 함수 (p: 385)
참고 항목
|
(C11)
|
호출 스레드의 실행을 주어진 시간 동안 일시 중단합니다
(함수) |
|
C++ documentation
for
yield
|
|