프로그래밍 언어/C || C++

Thread와 Thread 스케줄링

큼큼이 2018. 5. 10. 11:20

Thread 의 우선순위를 지정하는 방법에 대해서 공부해보겠습니다!


우선 Thread 에 대해서 알아야겠죠?


Thread 란 병렬적으로 여러개의 작업을 하기 위해  프로세스를 여러개의 Thread 로 나누어 작업을 수행하게 합니다.

쓰레드는 한번에 하나씩 동작할 수 있으므로 어떤 Thread 가 먼저 실행될 지는 아무도 알지 못합니다.


따라서 우선순위를 지정하여 Thread 의 스케줄링을 도울 수 있습니다.


그럼 우선순위를 지정하는 함수의 원형을 먼저 살펴보겠습니다.




BOOL WINAPI SetThreadPriority(
  _In_ HANDLE hThread,
  _In_ int    nPriority
);


Parameter 의 의미를 살펴보겠습니다.


HANDLE hThread [in]


: 우선순위 값을 설정할 스레드의 핸들.

*핸들은 THREAD_SET_INFORMATION or THREAD_SET_LIMITED_INFORMATION 의 접근 권한이 반드시 있어야 합니다*


nPriority [in]


: Thread 의 우선순위 값


Priority

 Meaning

 THREAD_MODE_BACKGROUND_BEGIN

0x00010000

백그라운드 처리 모드 시작, 우선 순위를 낮추어 백그라운드 작업을 수행하게 한다.

hThead 가 현재 Thread 핸들인 경우에만 지정할 수 있음, 이미 백그라운드 모드면 실패

 THREAD_MODE_BACKGROUND_END

0x00020000

백그라운드 처리 모드 종료. 백그라운드 처리 모드로 들어가기 전 우선순위로 복원시킴.

hThead 가 현재 Thread 핸들인 경우에 지정 가능, hThead 가 백그라운드 처리 모드가 아니면 실패 

 THREAD_PRIORITY_ABOVE_NORMAL

1

 보통보다 조금 높은 우선순위

 THREAD_PRIORITY_BELOW_NORMAL

-1

 보통보다 조금 낮은 우선순위

 THREAD_PRIORITY_HIGHEST

2

 가장 높은 우선순위

 THREAD_PRIORITY_IDLE

-15

가장 낮은 우선순위보다 더 낮은 우선순위 

 THREAD_PRIORITY_LOWEST

-2

 가장 낮은 우선순위

 THREAD_PRIORITY_NORMAL

0

 보통

 THREAD_PRIORITY_TIME_CRITICAL

15

 가장 높은 우선순위보다 더 높은 우선순위



Thread 의 우선순위를 지정하여 스케줄링을 도울 수 있습니다.


*모든 Thread 는 기본적으로 THREAD_PRIORITY_NORMAL 으로 우선순위가 설정되어 있음을 참고하세요*