최대 1 분 소요

Thread에서 사용할 수 있는 전역으로 선언하지만 지역변수처럼 작동하는 변수

예시코드

#include <iostream>
#include <thread>
#include <vector>

using namespace std;

//TLS 선언
thread_local int LThreadId = 0;

void ThreadMain(int threadID)
{
	LThreadId = threadID;
	while (true)
	{
		std::cout << "Thread ID : " << LThreadId << std::endl;
		this_thread::sleep_for(std::chrono::milliseconds(100));
	}
}

int main()
{
	vector<thread> threads;

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

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

	return 0;
}

stack 메모리공간과 다른게 뭘까?

얼핏보면 하나의 thread 에서만 쓸 수 있다는 측면에서 stack과 혼동하기 쉽다

하지만 큰 차이점은 stack은 보통 함수 단위로 작동한다 즉, 함수나 구역이 끝나면 사라지는 임시적인 변수의 측면이 있다 하지만 TLS는 Thread에 진입 후 해당 Thread만의 전역변수처럼 작동한다

예를들면 TLS는 thread에 묶여있는 main 함수가 또 다른 함수를 부르고 그 함수가 또 다른 함수를 부른다고 하면 그 동안에도 stack은 계속 사라지지만 TLS 변수는 계속 유지되는 것이다

Thread에서 하는 작업이 많을수록 의미가 있다(호출하는 함수가 많을수록)

태그: ,

카테고리:

업데이트:

댓글남기기