쓰레드란 무엇인가 ? : 쓰레드는 식당으로 치자면 종업원의 수이다. 식당에서 여러명의 종업원을 두게되면 일처리가 빠르다.
식당과 실제 컴퓨터의 차이 : 식당에 종업원은 각자가 각자의 영혼이 있다. 하지만 컴퓨터는 CPU 안에 있는 코어를 통해서 쓰레드를 작동 시키기 때문에, 예를들어 코어가 1개이고, 쓰레드가 4개이면 CPU의 코어가 쓰레드 4개를 하나 하나씩 돌면서 움직이게 된다.
이러한 쓰레드는 힙과 데이터영역을 함께 공유 할 수 있다.( 동시 참조 가능 )
하지만 이것은 문제를 일으킬 수 있음
서버를 돌릴 때에 이상적인 쓰레드 : 쓰레드 만큼의 코어가 존재하여 각각 일대일 대응이 되게끔 하는 것
멀티 쓰레드를 설계 하면서 중요하게 생각할 두가지 :
1) 코어와 쓰레드가 병렬적으로 이어지게끔 한다.
2) 힙과 데이터영역을 참조할 때 충돌이 발생하지 않게끔 한다.
joinable 함수는 쓰레드 t 의 id가 0인지 아닌지를 판별합니다. 0일때는 현재 쓰레드 객체가 죽어있는 상태입니다.
따라서 이 joinable 함수를 통해서 섣불리 join을 하는것이 아니라, 먼저 join을 해야 할지를 joinable을 통해서 확인을 하고, join을 실시한다.
if(t.joinable()){
t.join(); //일반적인 사용
}
std::thread t;
t=std::thread(HelloThread);
std::thread t(HelloThread,2);
실행 할 함수와 함수의 인자를 쉼표로 넣어주면 된다. 이 인자는 쉼표를 통해서 여러개도 입력 가능하다. cf ) thread 명령어