멀티 스레드 (Multithread)
멀티스레드 구조
필자(Chales Petzold)가 권장하는 프로그램의 구조는 다음과 같다.
주 스레드는 프로그램에서 필요한 모든 윈도우를 (관련된 모든 윈도우 프로시저도 포함하여) 생성하고, 이들 윈도우에 대한 모든 메시지를 처리한다. 다른 모든 스레드는 단순히 백그라운드에서 데이터를 처리한다. 이들은 주 스레드와의 통신을 제외하고는 사용자와 상호작용하지 않는다.
→ 주 스레드는 사용자 입력(혹은 그 밖의 메시지들)을 처리하고, 아마도 이 과정에서 부 스레드(secondary thread)를 생성한다. 추가적으로 생성된 스레드는 사용자와 관련이 없는 작업을 담당한다.
특정 프로그램 내의 모든 스레드는 같은 프로세스의 일부.
=> 메모리나 열린 파일과 같은 프로세스의 자원을 공유, 정적 변수 공유!
하지만, 각각의 스레드는 자신의 스택을 가지므로, 자동 변수는 스레드마다 다르다.
또한 스레드마다 자신의 프로세서 상태(Processor state)를 가지고 있어서, 스레드 전환이 일어날 때마다 저장과 복구가 반복된다.
* 임계영역 : 중간에 중단(interrupt)할 수 없는 코드 영역
윈도우즈 멀티 스레딩
- 새로운 실행 스레드를 생성하는 API 함수
▷ hThread = CreateThread( &security_attributes, // SECURITY_ATTRIBUTES 타입 구조체 포인터
dwStackSize, // 새로운 스레드의 초기 스택 크기
ThreadProc, // 스레드 함수에 대한 포인터
pParam, dwFlags, // ThreadProc()의 인자, 0
&idThread ) ; // 스레드 ID 값을 받을 변수에 대한 포인터
- 대부분의 윈도우즈 프로그래머들은 API 함수 대신 _beginthread( )라는 C런타임 라이브러리 함수를 사용하는 것을 선호!
▷ hThread = _beginthread (ThreadProc, uiStackSize, pParam) ;
댓글 없음:
댓글 쓰기