Linux 하 스 레 드 의 스케줄 링 정책 과 우선 순위 (1)
int pthread_attr_setschedparam ( pthread_attr_t * attr, const struct sched_param * param) ;
int pthread_attr_getschedparam ( const pthread_attr_t * attr, struct sched_param * param) ;
param. sched_priority = 51; //
, SCHED_OTHER。 , 。
int pthread_attr_setschedpolicy ( pthread_attr_t * attr, int policy) ;
위의 param 은 아래 의 이 데이터 구 조 를 사 용 했 습 니 다:
struct sched_param
{
int __sched_priority; //
} ;
우 리 는 아래 의 테스트 프로그램 을 통 해 우리 가 사용 하 는 시스템 지원 의 우선 순 위 를 설명 할 수 있다.
# include < stdio. h>
# include < pthread. h>
# include < sched. h>
# include < assert . h>
static int get_thread_policy( pthread_attr_t * attr)
{
int policy;
int rs = pthread_attr_getschedpolicy ( attr, & policy) ;
assert ( rs= = 0) ;
switch ( policy)
{
case SCHED_FIFO:
printf ( "policy= SCHED_FIFO/n" ) ;
break ;
case SCHED_RR:
printf ( "policy= SCHED_RR" ) ;
break ;
case SCHED_OTHER:
printf ( "policy=SCHED_OTHER/n" ) ;
break ;
default :
printf ( "policy=UNKNOWN/n" ) ;
break ;
}
return policy;
}
static void show_thread_priority( pthread_attr_t * attr, int policy)
{
int priority = sched_get_priority_max( policy) ;
assert ( priority!=-1) ;
printf ( "max_priority=%d/n" , priority) ;
priority= sched_get_priority_min( policy) ;
assert ( priority!=-1) ;
printf ( "min_priority=%d/n" , priority) ;
}
static int get_thread_priority( pthread_attr_t * attr)
{
struct sched_param param;
int rs = pthread_attr_getschedparam ( attr, & param) ;
assert ( rs= = 0) ;
printf ( "priority=%d" , param. __sched_priority) ;
return param. __sched_priority;
}
static void set_thread_policy( pthread_attr_t * attr, int policy)
{
int rs = pthread_attr_setschedpolicy ( attr, policy) ;
assert ( rs= = 0) ;
get_thread_policy( attr) ;
}
int main( void )
{
pthread_attr_t attr;
struct sched_param sched;
int rs;
rs = pthread_attr_init ( & attr) ;
assert ( rs= = 0) ;
int policy = get_thread_policy( & attr) ;
printf ( "Show current configuration of priority/n" ) ;
show_thread_priority( & attr, policy) ;
printf ( "show SCHED_FIFO of priority/n" ) ;
show_thread_priority( & attr, SCHED_FIFO) ;
printf ( "show SCHED_RR of priority/n" ) ;
show_thread_priority( & attr, SCHED_RR) ;
printf ( "show priority of current thread/n" ) ;
int priority = get_thread_priority( & attr) ;
printf ( "Set thread policy/n" ) ;
printf ( "set SCHED_FIFO policy/n" ) ;
set_thread_policy( & attr, SCHED_FIFO) ;
printf ( "set SCHED_RR policy/n" ) ;
set_thread_policy( & attr, SCHED_RR) ;
printf ( "Restore current policy/n" ) ;
set_thread_policy( & attr, policy) ;
rs = pthread_attr_destroy ( & attr) ;
assert ( rs= = 0) ;
return 0;
}
다음은 테스트 프로그램의 실행 결과 입 니 다.
policy= SCHED_OTHER
Show current configuration of priority
max_priority= 0
min_priority= 0
show SCHED_FIFO of priority
max_priority= 99
min_priority= 1
show SCHED_RR of priority
max_priority= 99
min_priority= 1
show priority of current thread
priority= 0Set thread policy
set SCHED_FIFO policy
policy= SCHED_FIFO
set SCHED_RR policy
policy= SCHED_RRRestore current policy
policy= SCHED_OTHER
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Exception in thread main java.lang. NoClassDefFoundError 오류 해결 방법즉,/home/hadoop/jarfile) 시스템은 Hello World 패키지 아래의class라는 클래스 파일을 실행하고 있다고 오인하여 시스템의 CLASSPATH 아래 (일반적으로 현재 디렉터리를 포함) Hell...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.