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

Heisia님의 프로필 이미지
Heisia

작성한 질문수

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

ThreadManager

ThreadManager::Join 관련 질문입니다.

해결된 질문

작성

·

285

0

void ThreadManager::Join()
{
	LockGuard guard(_lock);
 
	for (thread& t : _threads)
	{
		if (t.joinable())
			t.join();
	}
 
	_threads.clear();
}

for문 후에 _threads에 들어와서 실제로 join 되지 않고 clear되는 thread가 존재 할 가능성이 있어 보입니다. 그래서 Lock이 필요하다는 생각이 듭니다.

 

근데 강의 코드에서는 없이 사용하셔서 Lock이 없어도 괜찮은지 질문드립니다.

답변 2

1

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

어차피 처음에 쓰레드를 생성 후 메인 쓰레드에서만 호출해서 달아주지 않았지만
이런 부분은 자유롭게 수정을 하시면 됩니다.

1

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

LockGuard guard(_lock);

LockGuard로 락을 걸어주고 있습니다.

Heisia님의 프로필 이미지
Heisia
질문자

언제나 빠르고 친절한 답변 감사드립니다. 루키스님!

void ThreadManager::Join()
{
	for (thread& t : _threads)
	{
		if (t.joinable())
			t.join();
	}
	_threads.clear();
}

강의에서 사용된 코드는 위에 첨부된 걸로 원 질문 코드는 제가 필요해 보여서 LockGuard를 달아주었습니다.

 

근데 아무래도 원래 강의에서 락을 안 걸어주다보니 질문드렸습니다.

Heisia님의 프로필 이미지
Heisia

작성한 질문수

질문하기