std::thread

std::thread (스레드)

std::thread는 C++ 표준 라이브러리에서 단일 실행 스레드를 나타내는 클래스예요. 이 페이지에서는 std::thread의 생성, 소멸, 관찰자(observer), 연산(operation) 함수와 관련된 내용을 다뤄요.

출처: cppreference

본문

<thread> 헤더에 정의되어 있어요.

Defined in header <thread>
class thread; (since C++11)

std::thread 클래스는 단일 실행 스레드를 나타내요. 스레드를 사용하면 여러 함수를 동시에 실행할 수 있어요.

스레드는 연결된 thread 객체가 생성되는 즉시 실행을 시작해요 (운영체제의 스케줄링 지연이 있을 수는 있어요). 생성자 인자로 제공된 최상위 함수부터 시작해요. 최상위 함수의 반환값은 무시되며, 예외를 던지며 종료되면 std::terminate가 호출돼요. 최상위 함수는 std::promise를 통해 호출자에게 반환값이나 예외를 전달하거나, 공유 변수를 수정해서 전달할 수 있어요 (이 경우 동기화가 필요할 수 있으며, std::mutex와 std::atomic을 참고하세요).

std::thread 객체는 어떤 스레드도 나타내지 않는 상태일 수도 있어요 (기본 생성, 이동, detach, join 이후). 또한 실행 스레드가 어떤 thread 객체와도 연결되지 않을 수도 있어요 (detach 이후).

두 개의 std::thread 객체가 동일한 실행 스레드를 나타낼 수는 없어요. std::thread는 복사 생성(CopyConstructible)이나 복사 대입(CopyAssignable)이 불가능하지만, 이동 생성(MoveConstructible)과 이동 대입(MoveAssignable)은 가능해요.

멤버 타입 (Member types)

멤버 타입 정의
native_handle_type (선택 사항*) 구현 정의

멤버 클래스 (Member classes)

클래스 설명
id 스레드의 id를 나타내는 공개 멤버 클래스

멤버 함수 (Member functions)

함수 설명
(생성자) 새로운 thread 객체를 생성해요
(소멸자) thread 객체를 소멸하며, 기본 스레드는 join 또는 detach되어야 해요
operator= thread 객체를 이동시켜요
관찰자 (Observers)
joinable 스레드가 join 가능한 상태인지, 즉 병렬 컨텍스트에서 실행 중일 가능성이 있는지 확인해요
get_id 스레드의 id를 반환해요
native_handle 구현 정의된 기본 스레드 핸들을 반환해요
hardware_concurrency [static] 구현이 지원하는 동시 스레드 수를 반환해요
연산 (Operations)
join 스레드가 실행을 마칠 때까지 기다려요
detach 스레드가 thread 핸들과 독립적으로 실행되도록 허용해요
swap 두 thread 객체를 교환해요

비멤버 함수 (Non-member functions)

함수 설명
std::swap (std::thread) (C++11) std::swap 알고리즘을 특수화해요

같이 보기 (See also)

항목 설명
jthread (C++20) 자동 join 및 취소를 지원하는 std::thread

더 알아보기 (Learn more)

cppreference