std::thread
c++11부터 표준 라이브러리에 추가되었으며 여러 개의 작업을 동시에 실행할 때 사용한다.
thread객체를 만들고 함수를 인자로 전달해 새로운 쓰레드에서 작업을 시작하고 종료되면 리소스가 반환된다.
Thread 기본 함수
// <windows.h>에 있던 ::CreateThread() 에서
// c++11 도입된 방법 리눅스 window 상관 x
#include <thread>
void HelloThread()
{
cout << "Hello Thread" << endl;
}
int main()
{
std::thread thread(HelloThread);
// 쓰레드 갯수 정보 반환
thread.hardware_concurrency();
// 쓰레드의 아이디값
thread.get_id();
// 주 쓰레드와 독립적으로 실행하게 함 (끝나면 리소스 해제됨)
// ㄴ 리눅스에서 분리해서 만든 프로그램을 데몬이라고 함
thread.detach();
// 쓰레드 id가 0인지 체크함
thread.joinable();
// main에서 쓰레드가 종료될 때까지 대기해줌
thread.join();
}
Joinable()를 이용해서 쓰레드가 작업중인지 체크
std::thread thread(HelloThead);
// 쓰레드 id가 0인지 체크함
if (thread.joinable())
{
thread.join();
}
여러 쓰레드가 병렬 처리됨
void HelloThread_2(int32 num)
{
cout << num << endl;
}
int main()
{
vector<std::thread> v;
// 쓰레드 생성 및 함수 실행
for (int32 i = 0; i < 10; ++i)
{
v.push_back(std::thread(HelloThread_2, i));
}
// 쓰레드 작업이 끝날 때 까지 대기
for (int32 i = 0; i < 10; ++i)
{
if (v[i].joinable())
{
v[i].join();
}
}
cout << "Hello Main" << endl;
}

'C, C++' 카테고리의 다른 글
| <mutex> (0) | 2024.02.22 |
|---|---|
| <atomic> (0) | 2024.02.21 |
| weak_ptr (0) | 2023.07.17 |
| shared_ptr (0) | 2023.07.16 |
| unique_ptr (0) | 2023.07.15 |