- 쓰레드는 스택 영역만 독립적으로 같고 그 외 힙, 데이터, 코드 영역은 공유
- 각각의 쓰레드가 전역변수 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 함수는 할당된 메모리를 반환 됨
'시스템 프로그래밍' 카테고리의 다른 글
13-1. 쓰레드 동기화의 개념/임계 영역 접근 동기화 (0) | 2022.06.21 |
---|---|
12-3. 쓰레드의 상태 컨트롤 / 쓰레드의 우선순위 컨트롤 (0) | 2022.06.07 |
12-1. Windows에서의 쓰레드 생성과 소멸 (0) | 2022.06.02 |
11-2. Windows에서의 프로세스와 쓰레드 (0) | 2022.05.31 |
11-1. 프로세스와 쓰레드 (0) | 2022.05.31 |