반응형
Intro
안녕하세요. 이번에는 thread(스레드)에 대해서 포스팅하겠습니다. 고성능 프로그램을 만들 때는 멀티 코어를 잘 활용하느냐가 굉장히 중요합니다. 병렬 프로그래밍을 지원하기 위해 C++ 11에서 thread는 프로그래밍을 단순하게 하면서 플랫폼 독립적으로 구현이 가능합니다.
thread 만들기
간단하게 스레드를 만들어 보겠습니다.
코드
#include <iostream>
#include <thread>
int main(void)
{
std::thread Thread1([]()
{
{
for (int i = 0; i < 5; i++)
std::cout << "스레드 1 : " << i << std::endl;
}
});
Thread1.join();
return 0;
}
결과
Thread1.join()을 넣는 이유는 스레드가 아직 실ㅇ행 중인데 프로그램이 종료 되기 때문에 join함수를 사용하여 스레드의 실행이 끝날 떄까지 기다리게 한다.
다음은 여러개의 스레드를 돌렸을 때이다.
코드
#include <iostream>
#include <thread>
int main(void)
{
std::thread Thread1([]()
{
{
for (int i = 0; i < 5; i++)
std::cout << "스레드 1 : " << i << std::endl;
}
});
std::thread Thread2([]()
{
{
for (int i = 10; i < 15; i++)
std::cout << "스레드 2 : " << i << std::endl;
}
});
std::thread Thread3([]()
{
{
for (int i = 20; i < 25; i++)
std::cout << "스레드 3 : " << i << std::endl;
}
});
Thread1.join();
Thread2.join();
Thread3.join();
return 0;
}
결과
결과를 보니 제가 생각한 결과와 다르게 나왔습니다. 내 예상은 스레드 1이 끝나고 스레드 2가 시작될 줄 알았는데 결과가 뒤죽박죽 섞여 있습니다. 이유는 스레드가 동시에 시작되기 때문입니다. 스레드 1이 끝난 후 스레드 2가 실행되고 싶으면 스레드 1이 끝났을 때 join 함수를 넣어주면 해결이 됩니다.
코드
#include <iostream>
#include <thread>
int main(void)
{
std::thread Thread1([]()
{
{
for (int i = 0; i < 5; i++)
std::cout << "스레드 1 : " << i << std::endl;
}
});
Thread1.join();
std::thread Thread2([]()
{
{
for (int i = 10; i < 15; i++)
std::cout << "스레드 2 : " << i << std::endl;
}
});
Thread2.join();
std::thread Thread3([]()
{
{
for (int i = 20; i < 25; i++)
std::cout << "스레드 3 : " << i << std::endl;
}
});
Thread3.join();
return 0;
}
결과
결과를 보면 원하는 대로 스레드 1이 끝난 후 스레드 2가 실행되고 스레드 2가 끝난 후 스레드 3이 실행되었습니다.
마무리
이상으로 포스팅을 마치겠습니다. 다음 시간에는 스레드 식별자와 스레드 교환에 대한 포스팅을 하겠습니다.
감사합니다.
반응형
'[C++ STL]' 카테고리의 다른 글
[C++ Stl - 하드웨어 스레드 개수 알기] (0) | 2021.12.26 |
---|---|
[C++ - vector Tuple sort 방법] (0) | 2021.11.16 |
[C++ For문에서 Vector erase 사용법 (0) | 2021.11.01 |
[C++ STL - chrono(시간 측정)] (0) | 2021.06.30 |
[C++ STL - forward_list] (0) | 2021.06.24 |