免费注册 查看新帖 |

Chinaunix

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

请教与SCHED_FIFO的线程调度策略有关的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-22 17:19 |只看该作者 |倒序浏览
首先用pthread_attr_setschedpolicy()设置了2个attr,
其中attr1采用SCHED_OTHER策略,attr2采用SCHED_FIFO策略。
然后
    pthread_create(&thread[0], &attr1, thread1, NULL);
      pthread_create(&thread[1], &attr2, thread2, NULL);
创建了2个线程thread1和thread2。
先让thread1睡眠1ms。thread2执行。1ms后thread1被唤醒,但是前面已经把它设置为SCHED_OTHER了,而此时thread2尚未执行完毕,且thread2为SCHED_FIFO,这时按说thread2应该继续执行,直到自己执行完之后,thread1才得以执行。但是实验结果却是thread1被唤醒之后立即把thread2抢占了,直到thread1执行完之后才又继续执行thread2~!

从多个地方看到下面这句话:
SCHED_FIFO:不同的进程根据静态优先级进行排队,然后在同一优先级的队列中,谁先准备好运行就先调度谁,并且正在运行的进程不会被终止直到以下情况发生:1.被有更高优先级的进程所强占CPU;2.自己因为资源请求而阻塞;3.自己主动放弃CPU(调用sched_yield)

感觉thread2没有这3种情况之一发生,那请问thread2为什么被thread1给抢先了呢?
谢谢!

=====我的两个线程=====
void *thread1()
{
        usleep(1000);             //先让thread1睡眠1ms
        for (i=0; i < 100; i++)
        {
                printf("thread1 : number = %d  i=%d\n",number,i);
                pthread_mutex_lock(&mut);
                        number++;
                pthread_mutex_unlock(&mut);
     }
        pthread_exit(NULL);
}
void *thread2()
{
        for (i=0; i < 200; i++)
        {
                printf("thread2 : number = %d  i=%d\n",number,i);
                pthread_mutex_lock(&mut);
                        number++;
                pthread_mutex_unlock(&mut);
     }
        pthread_exit(NULL);
}

论坛徽章:
0
2 [报告]
发表于 2008-07-23 17:37 |只看该作者
又查了好多资料,未果,等待各位指点!

论坛徽章:
0
3 [报告]
发表于 2008-07-23 17:53 |只看该作者
SCHED_OTHER策略具体规则是什么?

thread1的优先级确认《=thread2优先级?

论坛徽章:
0
4 [报告]
发表于 2008-07-23 21:57 |只看该作者
我的理解是只要是SCHED_FIFO的线程,它的调度优先级必然比SCHED_OTHER的高,至于它的priority只在遵循同样调度策略的线程中才用得到....不知道这么理解对不对,讲解这一部分的资料好象都没交代清楚,倒是讲解线程同步的资料铺天盖地的。

所以,唉,这个问题到底怎么回事呢

[ 本帖最后由 yourbabyface 于 2008-7-24 10:26 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP