[네트워크 프로그래밍] 열혈 TCP/IP 18장 정리(멀티쓰레드 기반의 서버구현)
드디어 멀티스레드 부분이 나왔습니다.
이 챕터에서는 스레드 생성과 그에 따른 동기화 문제를 다룹니다.
운영체제 강의에서 배웠듯, 프로세스와 스레드는 다릅니다.
그리고, 스레드는 한 프로세스 내에서 나뉜 것으로, 공유자원이 있을 수 있습니다. 스택을 제외한 메모리 영역을 공유하기 때문입니다. 그래서, 각 스레드가 마음대로 공유자원(즉 임계구역, critical section)에 접근하고 수정한다면 프로그램의 결과는 개판이 됩니다.
그래서 운영체제 강의에서 짚고 넘어갔던 동기화 방법, 즉 Mutex와 Semaphore로 쓰레드를 동기화 하는 방법을 학습하였고, 스레드의 안전한 종료를 위해 pthread_join과 pthread_detach에 대해 배웁니다.
위 두 함수를 호출하지 않는다면, 스레드에 의해서 할당된 메모리 공간이 계속해서 남아있게 됩니다. 스레드의 main함수를 반환했다고 해서 자동으로 소멸되지 않습니다.
join은 쓰레드의 종료를 대기할 뿐 아니라 소멸까지 시킵니다. 이 함수의 문제점은, 쓰레드 종료를 대기할 때까지 프로세스는 블로킹 상태에 놓이게 된다는 점 입니다. 그래서 일반적으로는 detach를 주로 쓴다고 합니다.
[참고] 윤성우의 열혈 TCP/IP 소켓 프로그래밍
댓글
댓글 쓰기