thread_yield
thread_yield (스레드 양보)
std::this_thread::yield 함수는 현재 실행 중인 스레드가 다른 스레드에게 실행 기회를 양보하도록 구현에 힌트를 주는 함수예요. 이 함수는 C++11부터 사용할 수 있으며, 스레드 스케줄링을 세밀하게 제어하고 싶을 때 활용해요. 다만 이 함수의 동작은 운영체제와 스케줄러에 따라 달라질 수 있어요.
출처: cppreference
본문
정의
<thread> 헤더에 정의됨 |
||
|---|---|---|
void yield() noexcept; |
(C++11부터) |
이 함수는 구현체에게 스레드 실행을 재조정하라는 힌트를 제공해서, 다른 스레드가 실행될 수 있게 해요.
매개변수
(없음)
반환값
(없음)
참고 사항
이 함수의 정확한 동작은 구현체에 따라 달라져요. 특히 사용 중인 운영체제 스케줄러의 메커니즘과 시스템 상태에 크게 의존해요. 예를 들어, 선입선출(FIFO) 실시간 스케줄러(리눅스의 SCHED_FIFO)에서는 현재 스레드를 일시 중단하고 같은 우선순위의 준비 상태 스레드 큐의 맨 뒤에 넣어요. 만약 같은 우선순위의 다른 스레드가 없다면 yield는 아무 효과가 없어요.
예제
#include <chrono>
#include <iostream>
#include <thread>
// "busy sleep" while suggesting that other threads run
// for a small amount of time
void little_sleep(std::chrono::microseconds us)
{
auto start = std::chrono::high_resolution_clock::now();
auto end = start + us;
do
{
std::this_thread::yield();
}
while (std::chrono::high_resolution_clock::now() < end);
}
int main()
{
auto start = std::chrono::high_resolution_clock::now();
little_sleep(std::chrono::microseconds(100));
auto elapsed = std::chrono::high_resolution_clock::now() - start;
std::cout << "waited for "
<< std::chrono::duration_cast<std::chrono::microseconds>(elapsed).count()
<< " microseconds\n";
}
가능한 출력:
waited for 128 microseconds
같이 보기
| C 문서의 thrd_yield |
|---|