[Chapter 12] 쓰레드의 생성과 소멸

·2022년 11월 1일
0

※ 아래는 윤성우 뇌를 자극하는 윈도우즈 프로그래밍 한빛미디어(주) 2022년
Chapter12(p.371 ~ 406)를 읽고 정리한 내용입니다.

windows에서의 쓰레드 생성과 소멸
쓰레드의 성격과 특성
쓰레드의 상태 컨트롤
쓰레드의 우선순위 컨트롤

01 메모리를 공유하는 쓰레드

동시 접근의 문제점


변수 total 10이 있다.
두 개의 쓰레드(A, B)는 각각 6과 9를 더하려는 상황이다.
A 쓰레드가 6을 더한 값을 메모리에 저장하기 직전에 스케줄러에 의해 B 쓰레드가 실행된 경우,
B 쓰레드는 변하지 않은 total 값인 10에 9를 더하게 된다.
total이 19로 변한다.
그 후 A 쓰레드가 다시 실행되면 total이 16이 되고, 원한 결과값인 25는 얻지 못하게 된다.
-> 즉, 쓰레드의 변경은 프로그램 라인 단위로 이루어지지 않는다.

02 쓰레드의 상태 변화

쓰레드의 상태 변화는 이전에 기록한 프로세스의 상태 변화와 동일하다.

쓰레드의 상태를 컨트롤 하는 함수

SuspendThread : 쓰레드를 Blocked 상태에 두는 함수이다.
ResumeThread : Blocked 상태에 있는 쓰레드를 Ready 상태에 두는 함수이다.

서스펜드 카운트(Suspend Count)

SuspendThread 함수가 호출되면 서스펜드 카운트는 1 증가한다.
ResumeThread 함수가 호출되면 서스펜드 카운트는 1 감소한다.
서스펜드 카운트가 2인 경우 ResumeThread도 2번 호출되어야 Ready 상태에 놓이게 된다.
두 함수는 호출이 성공하면 변경되기 이전에 저장되었던 서스펜드 카운트를 반환하기 때문에
서스펜드 카운트의 변화를 확인할 수 있다

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

프로세스로부터 쓰레드를 분리한다는 것은 프로세스가 소유하는 쓰레드의 핸들을 반환함으로써
쓰레드의 Usage Count를 1로 두겠다는 뜻이다.
이는 쓰레드가 종료되는 시점에 쓰레드의 리소스를 반환하기 위함이다.

0개의 댓글