강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

youn7117님의 프로필 이미지
youn7117

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

쓰레드 생성

vector관련 질문입니다

작성

·

205

0

#include "Pch.h"

#include <iostream>

#include "CorePch.h"

#include <thread>

using namespace std;

void HelloThread_2(int32 num)

{

cout << num << endl;

}

int main()

//HelloThread();

vector<std::thread> v;

for (int32 i = 0; i < 10; ++i)

{

v.push_back(std::thread(HelloThread_2, i));

}

for (int32 i = 0; i < 10; ++i)

{

if (v[i].joinable())

v[i].join();

}

for (auto& e : v) {

cout << e.get_id() << " ";

}

cout << endl;

다음과 같이 벡터값을 찍어보았는데,  push_back을 해줬음에도 불구하고 벡터값이 0 0 0 0 0 0으로 찍혔습니다. 1~10의 값이 push_back되어 있어야 하는 거 아닌가요?

퀴즈

66%나 틀려요. 한번 도전해보세요!

멀티쓰레딩 환경에서 여러 쓰레드가 동시에 공유 데이터에 접근하여 값을 수정할 때 발생할 수 있는 예상치 못한 결과의 주요 원인은 무엇일까요?

데드락

쓰레드 지역 저장소(TLS) 충돌

경쟁 상태(Race Condition)

CPU 파이프라인 실패

답변 1

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

1) 우선 get_id()가 1~10은 출력하진 않고 좀 특이한 숫자들을 반환합니다.

2) 근데 모두 0이 뜨는 이유는 join() 을 해서 이미 다 끝난 다음에 get_id()를 하기 때문입니다.
순서를 join 이전으로 바꿔보세요

youn7117님의 프로필 이미지
youn7117

작성한 질문수

질문하기