반응형

std::this_thread::yield

 

다른 스레드가 실행 될 수 있게 허용하기 위해서 스레드의 실행을 재스케줄링하기 위한 구현 힌트를 주는 함수이다

 

정확한 동작은 구현에 의존되는데, 특히 OS 스케줄러의 머신과 시스템의 상태에 따라 그렇다

 

예를 들어 처음 들어온것이 처음 나가는 리얼타임 스케쥴러 (리눅스에서 SCHED_FIFO)는 현재 스레드를 지연 시킬수 있고 실행 준비된 동일 우선순위의 스레드의 큐 뒤에 추가될수도 있다

 

그리고 만약 동일한 우선순위의 다른 스레드들이 없다면 yield() 는 어떤 영향도 주지 못한다

 

#include <iostream>
#include <chrono>
#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";
}
Possible output:

waited for 128 microseconds

 

 

 

 

ref : https://en.cppreference.com/w/cpp/thread/yield

반응형

'운영체제 & 병렬처리 > Multithread' 카테고리의 다른 글

DFS Deadlock Detection  (0) 2022.10.02
Reader-Writer lock  (0) 2022.10.02
제프리 리처의 유저모드 동기화들  (0) 2022.09.28
Threadmanager  (0) 2022.09.27
Lock-Free Queue  (0) 2022.09.26

+ Recent posts