• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

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

24.01.17 19:32 작성 조회수 153

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

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

1

LockGuard guard(_lock);

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

Heisia님의 프로필

Heisia

질문자

2024.01.18

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

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

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

 

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