개요.

 

TLS (Thread Local Storage)는 각 스레드마다 유일하게 할당된 메모리 블럭인 "스레드컨트롤블럭(Thread Control Block)" 에 위치하며, 다른 스레드와 공유되지 않는 영역. 

 

설명.

프로세스와 스레드 의 공유자원 일반. 

프로세스 내의 스레드 들은 프로세스의 자원(주소공간, 파일핸들, 전역변수, 정적변수, 힙등)을 "공유"한다.

즉, 스레드 내의 지역변수를 제외한 힙, 전역변수,정적변수는 다른 모든 스레드 에서 접근 가능하다.

TLS 이용한 경우,

스레드에서 TLS영역에 정의된 데이터는 다른 스레드와 공유되지 않는다.

 

TLS 사용방식 2가지.

 

방식1. 키워드 __declspec ( thread)  이용하여 변수선언.

 아래처럼 선언하고 코드에서 일반변수 사용하듯이 그냥 사용하면됨.

 

__declspec ( thread) float myVar; <-- myVar 은 TLS영역에 생성된 것이며, 다른 스레드에서 접근하지 못하는 변수로 된것임.

 

방식2. win32 API 함수 이용하여 구현하는법.- TlsAlloc, TlsSetValue, TlsFree 

 

 float myVar = TlsAlloc(); //함수 TlsAlloc 로 TLS영역에 할당 시킨다.

 TlsSetValue(myVar,4.f); // TlsSetValue 로 변수 myVar 에 값을 저장.

 TlsFree(myVar); // 더이상 사용하지 않는경우에, TlsFree로 해제한다.

 

 

 

  

 본 글이 포함된 상위 정리 장소.

 

 Visual Studio/VC++/C/C# 활용정리 -> http://igotit.tistory.com/11

 

 

///544.

Posted by 리치굿맨

댓글을 달아 주세요