#include "pch.h"
#include <iostream>
#include "CorePch.h"
#include <thread> //11부터 thread 가 다른 플랫폼에서도 구현 가능되도롯 멀티플랫폼으로 지원 됨 => linux 에서도 실행 가능
void HelloThread()
{
std::cout << "Hello Thread" << std::endl;
}
int main()
{
//cout 은 os 커널에 요청하여 요청된 처리가 다시 콘솔화면으로 오는 느린 실행이다
//HelloWorld();
//std::thread t(HelloThread);
std::thread t;
auto idtest = t.get_id(); //관리하고 있는 스레드가 없다면 id 는 0
t = std::thread(HelloThread);
int32 count = t.hardware_concurrency(); //CPU 코어 개수는 몇개인지 힌트를 줌 => 논리적으로 실행할 수 있는 프로세스 개수 , 100% 확실한 동작이 되진 않을 수있어서 경우에따라 0 을리턴하면 제대로 조사가 안된 것
auto id = t.get_id(); // 각 쓰레드마다 부여되는 id , 쓰ㅜ레드 사이에서는 id 가 겹치지 않는다
t.detach(); //join 반대로 std::thread 객체에서 실제 스레드를 분리 => 스레드 객체 t 와 연결을 끊어줌 => 만들어진 스레듸이 정보를 더이상 사용 할수 없음
//쓰레드를 떼어내면, 쓰레드가 독립적으로 실행됩니다. 프로그램이 종료되면 떼어진 쓰레드는 동작이 멈추게 됩니다.
bool states = t.joinable(); //detach 되거나 연동된 슬레드가 없는 상태를 판별하기 위한 함수
//t.join(); //스레드가 끝날때까지 대기
if (t.joinable())
{
t.join();
}
std::cout << "Hello Main" << std::endl;
return 0;
}
위 코드에선 detach 하여 Join 을 하지 못하기 때문에 Hello Main 이 높은 확률로 나오는 것을 알 수 있다
'운영체제 & 병렬처리 > Multithread' 카테고리의 다른 글
[4] #include <atomic> 전역 변수 동기화 문제와 Atomic (0) | 2022.09.06 |
---|---|
[3] std::thread 와 인자 전달 (0) | 2022.09.06 |
[1] 물리적인 쓰레드와 논리적인 쓰레드의 이해 (0) | 2022.09.05 |
프로세스&쓰레드와 메모리(스택, 레지스터) (0) | 2018.09.03 |
Reentrant 와 Thread-safe 의 차이 (0) | 2015.12.16 |