免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1565 | 回复: 0
打印 上一主题 下一主题

问个线程优先级的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-29 15:02 |只看该作者 |倒序浏览
我用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, &param) == 0);
    param.sched_priority   =  priority;
    pthread_attr_setschedparam(&attr, &param);   
    assert( pthread_create(&taskId, &attr, (void*)functionPTR, NULL) == 0 );
    pthread_getschedparam(taskId, &policy, &param);
    printf("policy = %d, priority = %d\n",policy,param.sched_priority);

    pthread_attr_getschedpolicy(&attr, &policy);
    pthread_attr_getschedparam(&attr, &param);
    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和系统或者内核或者编译器什么的有关系?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP