- 论坛徽章:
- 0
|
我用pthread_attr_t设置好调度策略和优先级之后读出来为什么不对?
环境是red hat Linux 内核2.6.9-5
代码:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <pthread.h>
#include <assert.h>
pthread_t taskCreate(void (*functionPTR)(void), int priority)
{
pthread_t taskId;
int policy;
pthread_attr_t attr;
struct sched_param param;
assert ( pthread_attr_init(&attr) == 0 );
pthread_attr_setschedpolicy(&attr, SCHED_RR);
assert ( pthread_attr_getschedparam(&attr, ¶m) == 0);
param.sched_priority = priority;
pthread_attr_setschedparam(&attr, ¶m);
assert( pthread_create(&taskId, &attr, (void*)functionPTR, NULL) == 0 );
pthread_getschedparam(taskId, &policy, ¶m);
printf("policy = %d, priority = %d\n",policy,param.sched_priority);
pthread_attr_getschedpolicy(&attr, &policy);
pthread_attr_getschedparam(&attr, ¶m);
printf("policy = %d, priority = %d\n",policy,param.sched_priority);
pthread_attr_destroy(&attr);
return taskId;
}
void funcA()
{
sleep(1);
}
int main()
{
taskCreate(funcA, 99);
return 0;
}
运行:
[root@ANY ~]# uname -a
Linux ANY 2.6.9-5.ELsmp #1 SMP Wed Jan 5 19:30:39 EST 2005 i686 athlon i386 GNU/Linux
[root@ANY ~]# ./taskLib_wrong
policy = 0, priority = 0
policy = 2, priority = 99
可以看出attr已经被修改了,但是通过thread id读却仍旧是没有优先级的OTHER,是我有地方写错了还是create thread和系统或者内核或者编译器什么的有关系? |
|