상세 컨텐츠

본문 제목

Thread local storage

똑똑한 개발/C++ 게임개발

by 성댕쓰 2021. 8. 11. 19:46

본문

 

게임서버가 구동되면 일감이 균등하게 분배되어 있다가도 어느 순간 특정 영역에 일감이 몰리기도 한다. 일감이 몰리면 필연적으로 경합이 일어난다.

 

TLS는 쓰레드마다 가지고 있는 저장소이다.

 

경합지역에서 큼지막하게 데이터를 가지고 와서 TLS에서 자유롭게 사용하는 개념이다.

TLS와 스택은 다르다. 스택은 스코프를 넘어가면 소멸한다. 반면 TLS는 heap 영역 데이터 처럼 소멸하지 않는다. 그러나 다른 쓰레드에서는 사용할 수 없다.

 

// C++11 이전 방식 window api이용
// _declspec(thread) int32 value;
thread_local int32 LThreadId = 0;

void ThreadMain(int32 threadId)
{
	LThreadId = threadId;
	while (true)
	{
		cout << "Hi I am Thread " << LThreadId << endl;
		this_thread::sleep_for(1s);
	}
}

int main()
{
	vector<thread> threads;

	for (int32 i = 0; i < 10; i++)
	{
		int32 threadId = i + 1;
		threads.push_back(thread(ThreadMain, threadId));
	}

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

 

참조 : [C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버 - 인프런 | 강의 (inflearn.com)

'똑똑한 개발 > C++ 게임개발' 카테고리의 다른 글

Lock free stack  (0) 2021.08.25
Lock-based stack, queue  (0) 2021.08.11
메모리 모델  (0) 2021.08.10
CPU 파이프라인  (0) 2021.08.09
캐시  (0) 2021.08.07

관련글 더보기

댓글 영역