运行后,通过示波器监测的波形推算出每个线程运行了大约100ms后切换到下一个线程。我于是将 linux/include/asm-arm/param.h和 linux/include/asm-arm/arch-s3c2410/param.h文件中的HZ由100修改为1000。示波器再次监测后发现每个线程还是运行了100ms。
问题:
1、设置采用SCHED_RR实时调度策略后,每个线程的运行时间是固定为100ms吗?
2、再哪儿可以设置每个线程运行的时间?是固定为一个时间片还是可以设置为n个时间片?
3、修改HZ的值,为什么对线程的运行时间没有改变啊?
新手上路,请高手赐教!
pl:一个还没有解决的问题
在线程属性设置代码如下:
/*线程属性设置*/
pthread_attr_init(&attr);
/*pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);*/
pthread_attr_setscope(&attr,PTHREAD_SCOPE_SYSTEM);
pthread_attr_setschedpolicy(&attr,SCHED_RR);
pthread_attr_getschedparam(&attr, ¶m);
printf("schedparam :%d\n",param.sched_priority);
param.sched_priority=30;
pthread_attr_setschedparam(&attr, ¶m);
有点不明白的就是倒数第二句“param.sched_priority=30;”,如果加上这句,后面的六个线程,终端只显示打印第一个线程中的信息,并且还不能被中断;如果去掉这一句,后面六个线程中的信息轮询被打印出来。
同时恳请大虾们指正!
谢谢!
9 个解决方案
#1
没人回啊,自己顶上来!
#2
线程不好弄,就是不容易彻底弄清楚。能在实际应用中解决问题就行了,有时不一定是线程的执行时间的问题。
#3
线程的时间片不可控吗?这个是最大的一个问题。
#4
线程的时间片应该是不可控的吧~
线程之间是竞争cpu资源的~
线程之间是竞争cpu资源的~
#5
对!用得到线程的,当然许多工作会是同时进行,而各工作之间的联系,一般是不能准确地控制。我说得对不对?3楼的。
#6
2.4的内核时间片大概是20ms,用示波器测信号硬件需要一部分时间,所以要100ms
因为最小是20,你改那个没用应该,你可以试试改大
20ms我是这样得出来的:
for ( i = 0 ; i < n ; i ++ )
usleep(1);
当n很大时, usleep(1)近似等于usleep(20);
2.6内核是抢占式的,不再平均分配时间片,也就是说有点线程时间片长,有的短,
而且最小响应时间据说提高了10倍
因为最小是20,你改那个没用应该,你可以试试改大
20ms我是这样得出来的:
for ( i = 0 ; i < n ; i ++ )
usleep(1);
当n很大时, usleep(1)近似等于usleep(20);
2.6内核是抢占式的,不再平均分配时间片,也就是说有点线程时间片长,有的短,
而且最小响应时间据说提高了10倍
#7
近似等于usleep(20000);
#8
2.4?2.6?是指主频么?6楼能否解释下
#9
lz使用的内核是2.4还是2.6?
2.6采用的是时间复杂度为O(1)的调度策略,线程的调度策略有三种可设的方法:
非实时
1) SCHED_OTHER
实时
2) SCHED_FIFO
3) SCHED_RR
看看这个
http://www.linuxdriver.cn/html/200712/387.htm
2.6采用的是时间复杂度为O(1)的调度策略,线程的调度策略有三种可设的方法:
非实时
1) SCHED_OTHER
实时
2) SCHED_FIFO
3) SCHED_RR
看看这个
http://www.linuxdriver.cn/html/200712/387.htm
#1
没人回啊,自己顶上来!
#2
线程不好弄,就是不容易彻底弄清楚。能在实际应用中解决问题就行了,有时不一定是线程的执行时间的问题。
#3
线程的时间片不可控吗?这个是最大的一个问题。
#4
线程的时间片应该是不可控的吧~
线程之间是竞争cpu资源的~
线程之间是竞争cpu资源的~
#5
对!用得到线程的,当然许多工作会是同时进行,而各工作之间的联系,一般是不能准确地控制。我说得对不对?3楼的。
#6
2.4的内核时间片大概是20ms,用示波器测信号硬件需要一部分时间,所以要100ms
因为最小是20,你改那个没用应该,你可以试试改大
20ms我是这样得出来的:
for ( i = 0 ; i < n ; i ++ )
usleep(1);
当n很大时, usleep(1)近似等于usleep(20);
2.6内核是抢占式的,不再平均分配时间片,也就是说有点线程时间片长,有的短,
而且最小响应时间据说提高了10倍
因为最小是20,你改那个没用应该,你可以试试改大
20ms我是这样得出来的:
for ( i = 0 ; i < n ; i ++ )
usleep(1);
当n很大时, usleep(1)近似等于usleep(20);
2.6内核是抢占式的,不再平均分配时间片,也就是说有点线程时间片长,有的短,
而且最小响应时间据说提高了10倍
#7
近似等于usleep(20000);
#8
2.4?2.6?是指主频么?6楼能否解释下
#9
lz使用的内核是2.4还是2.6?
2.6采用的是时间复杂度为O(1)的调度策略,线程的调度策略有三种可设的方法:
非实时
1) SCHED_OTHER
实时
2) SCHED_FIFO
3) SCHED_RR
看看这个
http://www.linuxdriver.cn/html/200712/387.htm
2.6采用的是时间复杂度为O(1)的调度策略,线程的调度策略有三种可设的方法:
非实时
1) SCHED_OTHER
实时
2) SCHED_FIFO
3) SCHED_RR
看看这个
http://www.linuxdriver.cn/html/200712/387.htm