stop_token — std::stop_token

stop_token — std::stop_token

std::stop_token 클래스는 연관된 std::stop_source 객체에 대해 중지 요청이 이루어졌는지, 이루어질 수 있는지 확인하는 수단을 제공해요. C++20에서 도입됐어요. <stop_token> 헤더에 있어요.

본질적으로 연관된 중지 상태의 **스레드 안전 "뷰(view)"**예요.

출처: cppreference

본문

// <stop_token> 헤더, C++20
class stop_token;

사용 예 — 협조적 중지 확인

#include <stop_token>
#include <thread>
#include <iostream>

void worker(std::stop_token st) {
    while (!st.stop_requested()) {      // 중지 요청 확인
        // 작업 수행
        std::cout << "running\n";
        std::this_thread::sleep_for(std::chrono::milliseconds(100));
    }
    std::cout << "stopped\n";
}

int main() {
    std::jthread t(worker);   // 내부적으로 stop_token 제공
    std::this_thread::sleep_for(std::chrono::milliseconds(300));
    t.request_stop();         // 중지 요청
    // worker의 st.stop_requested()가 true가 됨
}

주요 멤버

멤버 설명
stop_requested() 중지 요청이 있었는지
stop_possible() 중지가 가능한 상태인지
swap() 교환
operator== 비교

특징

  • stop_token복사 가능 — 여러 스레드·함수에 나눠줄 수 있어요.
  • stop_possible()false면 중지 요청이 절대 없을 수 있어 최적화에 도움돼요.
  • std::stop_source로 중지를 내리면, 이 토큰들의 stop_requested()true가 돼요.
std::stop_source s;
std::stop_token t = s.get_token();
s.request_stop();
bool r = t.stop_requested();   // true

std::stop_token은 협조적 중지 메커니즘에서 "중지 요청을 감지하는 수신 쪽"의 핵심이에요. 반복 루프·동작에서 주기적으로 stop_requested()를 확인해 정리하거나 종료하는 협조적 방식이에요.

더 알아보기 (Learn more)

cppreference