쓰레드별 변수 __thread 사용

Posted at 2009/04/09 13:53 // in Programming // by Daniel

OS가 지원해야 하며 일단 제가 알기로는 Linux(2.6부터) gcc와 MSVC에서 지원되는데요,

TLS - Thread Local Storage 라고 불립니다. 시스템콜로 구현되는 것 같더군요.

일단 구현된 내용은 차치하고 사용법은 다음과 같습니다.

 

gcc의 경우만 설명

__thread int my_thread_var;
static __thread int my_static_thread_var;

 

__thread 키워드로 구분되며 이렇게 선언한 변수는 쓰레드마다 가지게 됩니다.

 

관련 내용 링크

Linux 2.6 속으로!

... 또 다른 변화는 TLS (Thread Local Storage) 시스템 호출의 도입이다. 쓰레드 레지스터로 사용될 수 있는 GDT (Global Descriptor Table) 엔트리를 한 개 이상 할당 할 수 있다. GDT는 CPU 기반이고 엔트리는 쓰레드 기반이다.

TLS - Thread Local Storage http://purewell.egloos.com/3398289

* GCC 메뉴얼 보면 TLS가 아니라 TSD(Thread Storage Duration)이라고 표현하였는데 대충 같은 말이다.
이것을 위해 POSIX는 pthread_key_create, pthread_get/setspecific 등 함수를 마련해놨지만 눈만 팽글팽글 돌고, 소스만 지저분해져 보일 것 같다. 귀찮으면 C99, C++98 표준 __thread 키워드를 사용하자.

http://kldp.org/node/78262

~$ /lib/libc.so.6
...
Thread-local storage support included. << 이부분이 보인다면 현재 glibc가 TLS를 지원하는버젼입니다.

크리에이티브 커먼즈 라이센스
Creative Commons License

이 글에는 트랙백을 보낼 수 없습니다

  1. 비밀방문자

    2010/01/29 00:40 [수정/삭제] [답글]

    관리자만 볼 수 있는 댓글입니다.