시스템 프로그래밍

12-2. 쓰레드의 성격과 특성

CalebHong 2022. 6. 7. 10:39

- 쓰레드는 스택 영역만 독립적으로 같고 그 외 힙, 데이터, 코드 영역은 공유

 

- 각각의 쓰레드가 전역변수 total에 접근하여 연산한 값을 저장

 

문제점

 - total 변수에 다중으로 접근 시 total에 값을 넣기 전에 쓰레드 간의 CS(Context Switching)이 발생하는 경우

 - total에 접근 중인 쓰레드가 있으면 다른 쓰레드는 접근할 수 없도록 해야 함(임계 영역 문제-Code Block)

 

프로세스로부터의 쓰레드 분리

 1) 쓰레드 Usage Count : 생성과 동시에 2

 2) 하나는 쓰레드 종료 시 감소, 하나는 CloseHandle 함수 호출 시 감소

 3) 쓰레드 생성 후 종료코드를 얻은 다음 [CloseHandle] 함수 호출 : 쓰레드 분리*

 

ANSI 표준 C 라이브러리와 쓰레드

 - ANSI 표준 C 라이브러리의 함수들은 쓰레드 기반에서 안정적이지 않음

 - 임계 영역 접근 문제가 발생 가능하기 때문- 둘 이상의 쓰레드가 동일한 메모리 공간에 접근하는 경우

 - 따라서 쓰레드의 안전한 형태로 표준 C 라이브러리를 별도로 디자인해서 제공

cf) CreateThread → _beginthreadex, ExitThread → _endthreadex

   - 쓰레드를 위한 별도의 공간을 마련하여 임계 영역 접근 문제가 해결됨

   - ExitThread 함수는 메모리 반환 문제가 발생할 수 있지만 _endthreadex 함수는 할당된 메모리를 반환 됨