멀티미디어 지식공작소 | [펌] 쓰레드에 대한 잡설들
멀티미디어 지식공작소 위치로그  |  태그  |  미디어로그  |  방명록
icon [펌] 쓰레드에 대한 잡설들
프로그램 기술/C/C++/MFC | 2008. 2. 3. 18:23
출처 블로그 > 피아니스트가 되고싶은 프로그래머
원본 http://blog.naver.com/gazette2/100009140876

쓰레드와 레지스터 :

쓰레드는 프로세스의 주소공간을 공유한다. 단, 별도의 스택과 TCB(스레드 제어블록) TLS(쓰레드 지역 저장공간: Thread Local Storage)을 갖는다. 스레드간의 스위칭이 일어날 때마다, 매번 레지스터가 백업되므로, 쓰레드를 위한 별도의 레지스터를 갖고 있다고 생각해도 좋다.


쓰레드와 변수 :

곧 프로그램은 프로세스공간 어딘가의 주소에 하나만 로드되고, 쓰레드 갯수만큼 여러개의 명령어 포인터 레지스터(IP Register)를 갖고 실행된다고 가정할 수 있다. 스레드마다 각자의 스택을 가지고 있으므로, 모든 지역변수는 스레드별로 안전하다. 하지만, 전역(Global), 정적(Static)객체는 모든 스레드가 프로세스의 주소공간을 공유하므로 결과적으로 모든 쓰레드로부터 공유된다. 따라서 그런 전역 또는 정적 객체에 접근할 때는 동기화 객체를 이용할 필요가 있다.


쓰레드와 윈도우 :

윈도우를 생성하는 코드를 포함하는 스레드는 그 윈도우를 소유한다. 윈도우가 메시지를 사용하는 순간(정확한 표현은 아니지만 대략적으로 맞는말이다) 쓰레드에는 메시지큐가 생성된다. 윈도우를 소유한 스레드는 MsgWait*  계열의 Wait API를 사용해야 한다. 그렇지 않고 일반 Wait* API를 대기 하고 있는 동안 다른 스레드에서 메시지를 Send(Post아님)한 경우에는 DeadLock 상황에 빠질 수 있다.


쓰레드와 입력 :

AttachThreadInput API를 이용하여 쓰레드간에 입력 상태를 공유할 수 있다.


쓰레드 핸들 :

쓰레드에는 핸들과 식별자라는 것이 존재하는데, 조금 개념이 다르다. 핸들은, 스레드가 생성되어 질때 CreateThread나 CreateRemoteThread로 부터 반환되어지는 값이며, 그 스레드가 종료해도 유효하다. 따라서 그 핸들 값을 가지고 스레드가 종료되었는지 확인할 수 있다. 이 핸들값은 DuplicateHandle API로 복사가능(같은 객체를 다른 핸들이 가리키고 있는 상태가됨)하다.


쓰레드 식별자(identifier) :

식별자(identifier)란 스레드별로 시스템에서 유일한 정수값(DWORD)이다. 스레드는 GetCurrentThreadID를 호출해 이 식별자를 확인할 수 있다. 또 이 식별자는 쓰레드가 시작될 때부터 유효해서, 쓰레드가 종료하는 순간 무효화 된다. OpenThread API를 호출해 이 식별자로부터 핸들값을 얻어올 수 있으나 윈도우 2000 이상의 운영체제에서만 유효하다.


쓰레드 임시 핸들 :

쓰레드는 GetCurrentThread API를 호출해서 임시 핸들을 얻을 수 있는데, 이 값은 GetCurrentThread API를 호출한 쓰레드에 대해서만 유효하다. 이 핸들로 부터 실제 핸들값을 얻으려면 DuplicateHandle API를 사용한다.


쓰레드와 GDI객체 :

GDI객체는 성능을 위해 어떤 쓰레드 동기화 알고리즘도 가지고 있지 않다. 따라서, 멀티쓰레딩과 관련된 어떤 종류의 Serialize(직렬화)도 일어나지 않는다. 이 말은, 한 쓰레드에서 어떤 GDI객체를 사용하고 있는동안, 다른 쓰레드에서 그 객체를 파괴하더라도 GDI는 아무런 도움도 주지 않을 것이라는 뜻이다. 또한 그 결과는 예측불가능하다. 가급적이면 GDI객체를 쓰레드에서 공유하지 않도록 한다. 만약 쓰레드간 공유를 피할수 없는 경우에는 별도의 동기화 알고리즘을 제공해야만 한다.


arrow 트랙백 | 댓글



관리자  |   글쓰기
BLOG main image
- 블로그를 처음 만들면서
분류 전체보기 (142)
기술동향 뉴스 (51)
신조어 사전 (1)
기술용어집 (5)
영상처리 기술 (29)
IT 사용정보 (7)
프로그램 기술 (23)
학술정보 (1)
생활정보 (9)
낙서장 (13)
나의 이야기 (0)
About Me (0)
Total :
Today :
Yesterday :
rss
위치로그 : 태그 : 방명록 : 관리자
multimedia's Blog is powered by Daum / Designed by plyfly.net