게임서버

게임서버) 2. 멀티쓰레드

PJNull 2023. 1. 6.
728x90
반응형

멀티쓰레드

 

//TODO

 

쓰레드 생성

 

쓰레드는 다음과 같이 생성이 가능하다.

 

#include<thread>

std::thread t(실행할 함수);

이런식으로 쓰레드를 생성하고 사용할수 있지만 문제가 발생할 수 있다. 예를 들어 자식 스레드가 아직 실행 중인데 부모 스레드가 종료한되는 경우이다. 기본적으로 메인 스레드가 종료되고도 자식 스레드가 계속 실행 중인 것은 비정상적인 상황으로 본다. 때문에 이 경우, 강제로 오류를 발생시킨다. 이러한 경우를 위해 join() 이라는 함수를 통해 해결할수 있다. 만약 자식쓰레드가 join을 호출하게 되면 부모 스레드는 자식쓰레드가 실행이 끝날 때까지 멈추게 된다. 자식쓰레드의 실행이 끝나면 다시 실행을 재개한다.

t.join();

 

vector를 이용한 다중쓰레드 생성

 

void Thread(int i)
{
	cout << "Thread"<<i<<endl;
}



vector<thread> threads;
for (int i = 0; i < 10; i++)
{
	threads.push_back(thread(Thread,i));

}
    
    
for (thread& t : threads)
{
	t.join();
}

 

 

알아두면 좋은 맴버함수

 

Joinable()

함수는 join이 가능한지의 여부를 반환한다. 이러한 여부는 쓰레드의 ID를 통해서 한다. 생성된 쓰레드는 고유한 id를 가지게 되는데, 이는 실행이 완료될 때까지 유효하다. 실행이 종료되면 ID는 0이된다.

get_id()

위에서 언급한 쓰레드ID를 가져올수 있는 함수이다. 경우에 따라서 Joinable과 동일한 역할을 수행할수 있다.

 

hardware_concurrency()

현 환경에서 병렬적으로 얻어올수 있는 하드웨어 코어의 갯수를 정수로 얻을수 있는 함수이다.

728x90
반응형

'게임서버' 카테고리의 다른 글

게임서버) 8. Select모델  (0) 2023.01.13
게임서버) 7. 논블로킹 소켓  (0) 2023.01.12
게임서버) 6. 소켓프로그래밍  (0) 2023.01.11
게임서버) 3.멀티쓰레드 공유자원  (0) 2023.01.06
게임서버) 1. 서버개론  (0) 2023.01.06

댓글