[問題] 一個ThreadX的問題

看板C_and_CPP (C/C++)作者 (larkes)時間11年前 (2014/09/25 08:00), 編輯推噓4(402)
留言6則, 5人參與, 最新討論串1/2 (看更多)
開發平台(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訊息,結果就差這麼多呢? 謝謝... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.38.13 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1411603202.A.5D6.html

09/25 08:22, , 1F
第一個threadA把CPU資源佔住了 沒辦法context switch
09/25 08:22, 1F

09/25 09:01, , 2F
threadA priority 比較高嗎?
09/25 09:01, 2F

09/25 09:06, , 3F
你要想想看 printf 有用到什麼
09/25 09:06, 3F

09/25 12:23, , 4F
壞習慣 記得要在while回圈中sleep(1)
09/25 12:23, 4F

09/26 00:13, , 5F
請問搶著cpu 不放是因為os排程特殊嗎?沒io就不放?
09/26 00:13, 5F

09/26 11:40, , 6F
很多 RTOS 都是這樣 不過我怎麼記得這個會 round-rabin
09/26 11:40, 6F
文章代碼(AID): #1K8ri2NM (C_and_CPP)
文章代碼(AID): #1K8ri2NM (C_and_CPP)