rt_thread_yield():當前線程主動放棄剩餘時間片,觸發一次調度。若有同優先級就緒線程,將獲得 CPU。
void yield_test1(void* p) {
rt_uint32_t cnt=0;
while(1) { rt_kprintf("t1:%d\n", cnt++); rt_thread_yield(); }
}
void yield_test2(void* p) {
rt_uint32_t cnt=0;
while(1) { rt_kprintf("t2:%d\n", cnt++); rt_thread_yield(); }
}
// 啟動
rt_thread_t t1 = rt_thread_create("t1", yield_test1, RT_NULL, 2048, 10, 5);
rt_thread_t t2 = rt_thread_create("t2", yield_test2, RT_NULL, 2048, 10, 5);
if(t1) rt_thread_startup(t1);
if(t2) rt_thread_startup(t2);
t1:0 t2:0 t1:1 t2:1 t1:2 t2:2 ...
兩線程嚴格交替輸出,證明 yield() 立即觸發上下文切換。
若無 yield(),需等待時間片耗盡才切換,輸出將呈現批次式(連續多行同一線程)。