[问题] 一个ThreadX的问题

楼主: larkes (larkes)   2014-09-25 08:00:00
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
c, ThreadX
问题(Question):
我在ThreadX这平台上建立了两个thread,
其中一个thread,命名为thread#A,它跑的code如下:
threadA_entry()
{
while(1)
{;}
}
另一个thread,命名为threadB,它跑的code如下:
threadB_entry()
{
while(1)
{
pintf("\nI am threadB")
}
}
结果程式跑起来,我发现console不会显示"I am threadB"的讯息,
看起来似乎是因为threadA卡在while loop里面了.
但是如果我把threadA的内容改成如下:
threadA_entry()
{
while(1)
{
pintf("\nI am threadA")
}
}
结果程式跑起来,我发现console会先显示几行"I am threadA"的讯息,
然后再显示几行"I am threadB"的讯息.
然后再继续显示几行"I am threadA"的讯息.
然后再显示几行"I am threadB"的讯息.
不断的轮流显示这两种讯息...
看得出来threadA跟threadB他们轮流执行.
我的问题是:
为什么threadA没有加printf讯息时,
它就会一直占用执行权而不让给threadB,
但是只不过加一个printf讯息,就会愿意跟threadB共享执行权力呢?
为什么多加一个printf讯息,结果就差这么多呢?
谢谢...
作者: daniel0203   2014-09-25 08:22:00
第一个threadA把CPU资源占住了 没办法context switch
作者: carylorrk (carylorrk)   2014-09-25 09:01:00
threadA priority 比较高吗?
作者: hichcock (快乐一整年 ^^~~~)   2014-09-25 09:06:00
你要想想看 printf 有用到什么
作者: Killercat (杀人猫™)   2014-09-25 12:23:00
坏习惯 记得要在while回圈中sleep(1)
作者: QQ29 (我爱阿蓉)   2014-09-26 00:13:00
请问抢著cpu 不放是因为os排程特殊吗?没io就不放?
作者: carylorrk (carylorrk)   2014-09-26 11:40:00
很多 RTOS 都是这样 不过我怎么记得这个会 round-rabin

Links booklink

Contact Us: admin [ a t ] ucptt.com