#include <stdio.h>
#include <pthread.h>
#include <sched.h>
#include <assert.h>
static int GetThreadPolicyFunc(pthread_attr_t *pAttr) {
int iPolicy;
int igp = pthread_attr_getschedpolicy(pAttr, &iPolicy);
assert(igp == 0);
switch (iPolicy)
{
case SCHED_FIFO:
printf("Policy is SCHED_FIFO\n");
break;
case SCHED_RR:
printf("Policy is SCHED_FIFO\n");
break;
case SCHED_OTHER:
printf("Policy is SCHED_OTHER\n");
break;
default:
printf("Policy is unknown\n");
break;
}
return iPolicy;
}
static void PrintThreadPriorityFunc(pthread_attr_t *pAttr, int iPolicy) {
int iPriority = sched_get_priority_max(iPolicy);
assert(iPolicy != -1);
printf("Max Priority is %d\n", iPriority);
iPriority = sched_get_priority_min(iPolicy);
assert(iPolicy != -1);
printf("Min Priority is %d\n", iPriority);
}
static int GetThreadPriorityFunc(pthread_attr_t *pAttr) {
struct sched_param sParam;
int irs = pthread_attr_getschedparam(pAttr, &sParam);
assert(irs == 0);
printf("Priority = %d\n", sParam.sched_priority);
return sParam.sched_priority;
}
static void SetThreadPolicyFunc(pthread_attr_t *pAttr, int iPolicy) {
int irs = pthread_attr_setschedpolicy(pAttr, iPolicy);
assert(irs == 0);
GetThreadPolicyFunc(pAttr);
}
int main(int argc, char* argv[]) {
pthread_attr_t pAttr;
struct sched_param sched;
int irs = pthread_attr_init(&pAttr);
assert(irs == 0);
int iPolicy = GetThreadPolicyFunc(&pAttr);
PrintThreadPriorityFunc(&pAttr, iPolicy);
PrintThreadPriorityFunc(&pAttr, SCHED_FIFO);
PrintThreadPriorityFunc(&pAttr, SCHED_RR);
int iPriority = GetThreadPriorityFunc(&pAttr);
SetThreadPolicyFunc(&pAttr, SCHED_FIFO);
SetThreadPolicyFunc(&pAttr, iPolicy);
irs = pthread_attr_destroy(&pAttr);
assert(irs == 0);
return 0;
}
测试
gcc one.c -o one -lpthread
➜ ./one
Policy is SCHED_OTHER
Max Priority is 0
Min Priority is 0
Max Priority is 99
Min Priority is 1
Max Priority is 99
Min Priority is 1
Priority = 0
Policy is SCHED_FIFO
Policy is SCHED_OTHER