thread_jthread
thread_jthread (단일 실행 스레드)
std::jthread는 C++20에서 도입된 클래스로, 하나의 실행 스레드를 나타내요. 기존 std::thread와 비슷하게 동작하지만, 소멸 시 자동으로 join되고 특정 상황에서 중단(취소)될 수 있는 점이 달라요. 내부적으로 공유 중단 상태를 관리하는 std::stop_source를 보유하고 있어서, 스레드 함수가 중단 요청을 확인하고 협조적으로 종료할 수 있도록 도와줘요.
출처: cppreference
본문
std::jthread는 <thread> 헤더에 정의되어 있으며, C++20부터 사용할 수 있어요. 스레드는 연결된 jthread 객체가 생성될 때 즉시 실행을 시작하며, 생성자 인자로 전달된 최상위 함수를 실행해요. 이 함수의 반환값은 무시되고, 예외로 종료되면 std::terminate가 호출돼요. 함수의 결과나 예외는 std::promise 또는 공유 변수를 통해 호출자에게 전달할 수 있어요 (동기화가 필요할 수 있으며, std::mutex나 std::atomic을 참고하세요).
std::thread와 달리 std::jthread는 내부적으로 std::stop_source 타입의 private 멤버를 논리적으로 보유하며, 이는 공유 중단 상태를 유지해요. jthread 생성자는 첫 번째 인자로 std::stop_token을 받는 함수를 받을 수 있는데, 이 토큰은 내부 std::stop_source에서 자동으로 전달돼요. 따라서 함수는 실행 중 중단이 요청되었는지 확인하고, 요청되었다면 즉시 반환할 수 있어요.
std::jthread 객체는 어떤 스레드도 나타내지 않는 상태일 수도 있어요 (기본 생성, 이동, detach, join 이후). 또한 실행 중인 스레드가 어떤 jthread 객체와도 연관되지 않을 수도 있어요 (detach 이후). 두 개의 jthread 객체가 동일한 스레드를 나타낼 수 없으며, std::jthread는 복사 생성과 복사 할당이 불가능하지만 이동 생성과 이동 할당은 가능해요.
멤버 타입
| 멤버 타입 | 정의 |
|---|---|
id |
std::thread::id |
native_handle_type (선택적*) |
std::thread::native_handle_type |
멤버 함수
| (생성자) | 새로운 jthread 객체를 생성해요 (public member function) |
|---|---|
| (소멸자) | 스레드가 join 가능하면 중단을 요청하고 스레드를 join해요 (public member function) |
operator= |
jthread 객체를 이동해요 (public member function) |
| 관찰자(Observers) | |
joinable |
스레드가 join 가능한지, 즉 병렬 컨텍스트에서 실행 중일 수 있는지 확인해요 |
get_id |
스레드의 ID를 반환해요 |
native_handle |
구현 정의된 기본 스레드 핸들을 반환해요 |
hardware_concurrency [static] |
구현이 지원하는 동시 스레드 수를 반환해요 |
| 연산(Operations) | |
join |
스레드가 실행을 마칠 때까지 기다려요 |
detach |
스레드가 스레드 핸들과 독립적으로 실행되도록 허용해요 |
swap |
두 jthread 객체를 교환해요 |
| 중단 토큰 처리(Stop token handling) | |
get_stop_source |
스레드의 공유 중단 상태와 연관된 stop_source 객체를 반환해요 |
get_stop_token |
스레드의 공유 중단 상태와 연관된 stop_token을 반환해요 |
request_stop |
스레드의 공유 중단 상태를 통해 실행 중단을 요청해요 |
비멤버 함수
swap (std::jthread) (C++20) |
std::swap 알고리즘을 특수화해요 (함수) |
|---|
참고 사항
| Feature-test macro | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_jthread |
201911L | (C++20) | 중단 토큰 및 joining thread |
같이 보기
thread (C++11) |
별도의 스레드를 관리해요 (클래스) |
|---|