[問題] 一個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