스레드 프로그래밍에서 TLS(TSD)와 동기화 객체..
글쓴이: pectin / 작성시간: 화, 2010/06/01 - 1:22오후
안녕하세요.
pthread 프로그래밍에서 TLS(TSD)를 사용하기 위해 pthread_key_create, pthread_setspecific, pthread_getspecific 등을 이용하는 것과,
해당 변수를 mutex등을 이용해 동기화 객체로 보호하는 것이 어떤 차이가 있는지 알고 싶습니다.
전역변수 A가 있다면,
TLS를 이용하면 A의 값이 스레드 마다 달라지는 것인가요? 그렇다면 TLS는 어떤 경우에 사용하는 것인가요?
초보에게 가르침 부탁드립니다.
Forums:
스레들은 메모리
스레들은 메모리 공간을 공유하기 때문에 공유해서 사용하지 않기 위해 TLS를 사용합니다.
예를 들어 스레들별로 DB 연결을 개별적으로 가지고 있다면 TLS에 할당해서 관리하는게 편하겠죠.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
Thread Local Storage
TLS의 L은 local을 뜻합니다. (TSD의 S도 비슷한 의미인 specific이죠..)
즉, 전역 변수라기 보다는 지역 변수에 가까운 의미입니다.
TLS/TSD에 할당된 데이터는 해당 스레드에서만 접근(해야)하기 때문에
경쟁이 발생하지 않아서 별도의 동기화 연산이 필요하지 않습니다.
전역 변수는 모든 스레드가 접근하므로 동기화가 필요합니다.
어떤 변수가 TLS로 선언된다면 이는 더 이상 전역 변수가 아닙니다.
댓글 달기