我在Linux(3.4)中有一個實時線程。在某些條件下,即使它沒有完成當前時間片的使用,我也希望它將控制權交給具有相同優先級的其他線程。我想用下面的代碼:從linux內核產生
if (condition) {
resched_task();
cond_resched();
}
不過,我沒有看到任何人在代碼中這樣做,讓我覺得有一些其他的(更好嗎?)這樣做的方式。有沒有一個標準的方法來做到這一點?
我在Linux(3.4)中有一個實時線程。在某些條件下,即使它沒有完成當前時間片的使用,我也希望它將控制權交給具有相同優先級的其他線程。我想用下面的代碼:從linux內核產生
if (condition) {
resched_task();
cond_resched();
}
不過,我沒有看到任何人在代碼中這樣做,讓我覺得有一些其他的(更好嗎?)這樣做的方式。有沒有一個標準的方法來做到這一點?
您可以使用sched_yield()函數來產生時間片的其餘部分,即as discussed here。
sched_yield()會導致調用線程放棄CPU。線程移動到隊列的末尾以獲得其靜態優先級,並且新線程運行。
謝謝。你不知道sched_yield()和yield()之間的區別嗎? – John
@John你在說什麼yield()函數?我不知道一個簡單的'yield()',對不起。 – TypeIA
在core.c(第5029行)中,有一個叫做yield的函數。在函數的頂部有一個很大的警告:'千萬不要使用這個函數,有99%的機會你做錯了。'...它最終調用sys_sched_yield(),這讓我有點疲倦。 – John