스레드 상태변화

카테고리 없음 2015. 10. 11. 18:34

스레드의 상태 변화

 

Window에선느 상태가 변화하는 주체가 프로세스가 아닌 스레드이다.

 

스레드의 상태변화

 

스레드는 생성하자마자 Ready상태가 된다.

스케줄러에 의해서 선택되면 Running상태가 되면서 실제로 실행이 된다.

Ready상태에 놓이는 스레드는 여러개가 될 수 있지만 Running상태는 하나밖에 없다.

 

실행중인 스레드에게 할당된 Time Slice가 모두 소비되서 다른 스레드에게 실행의 기회를 넘겨야 될 때, Running상태에서 Ready상태로의 이동이 이루어진다.

 

Running 상태에 있는 스레드가 입출력 연산하거나 , Sleep이 호출되면 Blocked된다.

Blocked상태에 있는 스레드는 Blocked를 풀면 다시 Ready상태로 돌아간다...

 

 

 

DWORD SuspendThread( HANDLE hThread );

hThread : Blocked 상태에 두고자 하는 스레드의 핸들을 인자로 전달한다.

Suspend Countf를 +1 시킨다.

 

DWORD ResumeThread( HANDLE hThread );

hThread : Ready상태에 두고자 하는 핸들을 인자로 전달

Suspend Count를 -1 시킨다.

 

 

스레드의  커널 오브젝트에는 SuspendThread 함수의 호출 빈도수를 기록하기 위한 서스펜드

카운트(Suspend Count)라 불리는 멤버가 존재한다...

 

현재 실행중인 Suspend Count는 0이다.

 

이때 SuspendThread를 호출시키면 Suspend Count는 1로 증가하면서 Blocked상태로 놓인다.

함수의 반환값을 통해서 Suspend Count의 변화를 확인할 수 있다.

 

 

admin