Namespaces
Variants

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)

참고 항목

호출 스레드의 실행을 주어진 시간 동안 일시 중단합니다
(함수)