[네트워크 프로그래밍] 열혈 TCP/IP 19~20장 정리(Windows에서의 쓰레드 사용과 동기화)
19, 20장에서는 윈도우즈에서 멀티쓰레드 환경을 구성하는 방법, 그에따른 동기화 방법을 설명합니다.
리눅스와는 달리 윈도우 운영체제는 '커널 오브젝트' 라는 것이 있습니다. 이는 운영체제가 소유하고있는 모든 오브젝트를 의미합니다.(더 자세히는, 커널이 소유하고있는 모든 리소스를 의미.)
main함수는 쓰레드이며 현대에서는 프로세스가 쓰레드들을 담고있는 바구니라고 생각하면 편하다고 합니다.
커널 오브젝트는 signaled 상태와 non-signaled상태 두가지가 있습니다. 애초에 커널 오브젝트가 생성 되었다면 non-signaled 상태로 초기화 됩니다. 그리고, 이벤트가 발생한 경우 signaled상태로 변경시키게 됩니다. 이를 통해 멀티 쓰레드 프로그래밍이 가능해 집니다.
WaitForSingleObject / WaitForMultipleObject 함수가 그것입니다. 이 함수는 signaled상태인지 확인하는데(쓰레드 종료 체크) 사용됩니다. 또한, non-signaled상태로 되돌리는 기능도 가지고 있습니다.
우선 위 함수 사용은 접어두고, 동기화 부분으로 넘어갑니다.
알다시피 운영체제는 유저모드와 커널모드가 있고 무언가 core action을 운영체제에게 요청할 때마다 유저모드에서 커널모드로 이동합니다.  
유저모드 동기화/ 커널모드 동기화가 있고 Critical section / Mutex, Semaphore, Event 방식으로 리눅스 때와 같이 임계구역을 동기화 합니다. 
댓글
댓글 쓰기