(C++ : IOCP-7) Thread Local Storage(TLS)

Posted by : at

Category : Cpp   iocp



  • Thread마다 각자의 스택영역이 존재하며
  • Heap(new), 데이터(static)은 공유해서 쓴다.
  • 하지만 여기서 빠진 영역이 하나있는데 그 영역이 Thread Local Storage(TLS)이다.

  • TLS는 어떠한 경우에 쓸까?
  • Heap, 데이터 영역에 데이터를 항상 읽어쓰기에는 경합이 자주발생해 속도가 느릴수 있다.
  • TLS에 Heap, 데이터 영역의 데이터를 미리 복사해 놓고 사용하게 된다.

  • 그럼 스택과 무슨차이인가?
  • 스택은 함수내에서 사용하는 불안정적인 데이터이다.
  • 한 Thread에서 사용할 데이터의 저장은 TLS에 저장해 두는것이 맞다
// __declspec(thread) int32 value;  // 이전방식
thread_local int32 LThreadId = 0;   // TLS 선언

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();
}

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links