thread_local

김대익·2022년 3월 25일
0

thread_local은 하나의 thread안에 종속이 되는 변수이다.

#include <iostream>
#include <thread>

int globalNum = 0;
thread_local int tlNum = 0;

void fn() {
	int fnNum = 2;
    std::cout << globalNum << std::endl;
    std:cout << tlNum << std::endl;
    
    globalNum++;
    tlNum++;
}

int main() {
	using namespace std::chrono_literals;
    
    int mainNum = 1;
    std::thread t1(fn);
    std::this_thread::sleep_for(1s);
    std::thread t2(fn);
    
    t1.join();
    t2.join();
}

위 함수를 실행하면 globalNum만 증가하는 것을 볼 수 있다

각 변수의 위치를 보면 tlNum은 실행되는 thread 근처에 변수를 저장하는 영역에 tlNum을 저장하고
globalNum은 static영역에 globalNum을 저장한다
먼저 t1이 실행되면 t1의 tlNum과 globalNum을 호출하고 1씩 증가시킨다.

이후 t2이 실행되면 t2의 thread 변수 tlNum = 0이 선언되면서
t2의 tlNum인 0과 이미 1이 증가된 globalNum인 1을 출력한다

0개의 댓글