yield — this_thread::yield

yield — this_thread::yield

std::this_thread::yield실행 스레드를 재스케줄링하도록 구현에 힌트를 제공해, 다른 스레드가 실행될 수 있게 하는 함수예요. C++11에서 도입됐어요. <thread> 헤더에 있어요.

출처: cppreference

본문

// <thread> 헤더, C++11
void yield() noexcept;

매개변수 / 반환 값

(없음) / (없음)

사용 예

#include <thread>
#include <atomic>

std::atomic<bool> flag{false};

// 다른 스레드가 flag를 set할 때까지 양보하며 대기 (비효율적 예)
while (!flag.load()) {
    std::this_thread::yield();   // CPU 양보
}

특징

  • 실제 동작은 구현에 의존해요 — "다른 스레드로 스위칭할 기회"를 주는 힌트예요.
  • 바쁜 대기(busy-wait) 루프에서 다른 스레드에 CPU를 양보할 때 쓰여요.
  • sleep_for처럼 일정 시간을 잠자는 게 아니라, 대기 큐 끝으로 재배치될 수 있어요.
// 폴링 대기의 예
while (!std::atomic_load(&done)) {
    std::this_thread::yield();
}

주의

  • 바쁜 대기 자체는 비효율적이므로, 가능하면 조건 변수로 대체하는 것이 좋아요.
  • 멀티코어에서 동기화 원시 요소 없이 공유 변수를 읽는 것만으로는 데이터 경쟁이 될 수 있어요 — std::atomic 사용 필요.

yield는 프로세서를 붙들지 않고 다른 스레드에 실행 기회를 넘기고 싶은 대기 루프에서 유용하지만, 잘 설계된 코드는 조건 변수·세마포어를 우선 사용해요.

더 알아보기 (Learn more)

cppreference