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()를 확인해 정리하거나 종료하는 협조적 방식이에요.