看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
daniel0203: 第一個threadA把CPU資源佔住了 沒辦法context switch 09/25 08:22
carylorrk: threadA priority 比較高嗎? 09/25 09:01
hichcock: 你要想想看 printf 有用到什麼 09/25 09:06
Killercat: 壞習慣 記得要在while回圈中sleep(1) 09/25 12:23
QQ29: 請問搶著cpu 不放是因為os排程特殊嗎?沒io就不放? 09/26 00:13
carylorrk: 很多 RTOS 都是這樣 不過我怎麼記得這個會 round-rabin 09/26 11:40