Thread_12_C++ TLS(Thread Local Storage)
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에서 하는 작업이 많을수록 의미가 있다(호출하는 함수가 많을수록)
댓글남기기