운영체제

[게임 프로그래머 입문 올인원] 멀티쓰레드 프로그래밍 : 쓰레드

순정법사 2024.12.02

A. 쓰레드

1. 쓰레드 실습

a. 기초 쓰레드 생성

쓰레드를 만들어서 사용하는 연습하기

않이 겁나 열심히 만들어서 쓰고있었는데 갑자기 다 날라갔다

 

새로운 쓰레드를 만들어보자

 

이름은 대충 설정해준다

 

메인이 끝났는데 자식쓰레드가 종료되지 않아서 에러가 남

 

메인에서 std::thread t(HelloThread) 실행

위 코드를 실행하면 스레드를 하나 더 만들 수 있음

Hellothread()인자가 있어야 실행됨

 

💥 위 코드를 실행하면 오류가 발생된다

이유는 메인 스레드가 원래 존재하는데,

새로운 쓰레드가 생성되고 종료되기도 전에 메인이 종료되어서 그럼

따라서 아래와 같이 작성

 

 

t.join(); 을 사용하면 종료된 쓰레드를 모아주는 역할을 한다 (끝난지 확인? 정도)

joinable()을 사용해서 이중체크를 해도 되는데 안해도됨

 

실행하면 이렇게 된다

 

스레드를 살펴보면 하나 더 만들어진 모습

 

새로 만들어준 스레드에서 어떤 일을 해야하니까 무한반복문을 걸어준다

 

✨ 근데 여기서 알아둬야할게 있음

스레드를 이렇게 임의로 생성해주면, 브레이크 포인트를 걸어도 그게 아닐 수있따 (영혼이 2개??!)

그래서 나는 여기서 코드를 실행해도 다른 스레드가 실행되는 환경이 있을 수 있어서 

매우 조심해서 사용해야 함 

 

b. Multi Thread 생성

스레드를 여러개 만들고싶으면 

코드를 여러개 작성하거나 

벡터로 관리해도 됨

 

마지막 줄은 스레드를 모아 종료하는 t.join()

 

실행하면 이 런 모습

 

이 코드를 살펴보면 cpu코어가 몇개 있는지 확인할 수 있는데

 

위 코어보다 더 많은 스레드는 생성해봤자 의미가 없어짐

 

c. 쓰레드(직원)을 몇명까지 만들어야 할까?

코어를 넘어서는 쓰레드는 영혼이 왔다 갔다 하면서 하는 비용도 있음

따라서 굳이 좋아지는게 절대 아님 (월급이 없어서 파산함)

 

서버 전용 컴퓨터는 코어가 많아서 많이 사용할 수 있음

 

멀티스레드와 메모리

-- 어려워지는 것

 

메모리 영역중에 힙, 데이터 메모리 영역은 공유해서 사용하기 때문에 주의해야 함

(코드, 스택은 괜찮음)

 

멀티스레드는 프로그래밍의 흑마법..

실전 프로젝트에서 이쪽 이슈를 얻어터지면 매우 부담스럽게 느껴진다

하지만 mmorpg 를 만들기 위해선 꼭 있어야 하는 내용