URL: http://www.mcuchina.com/article/2007/1227/article_59.html
1.taskYIELD()
比如我創建了8個優先級一樣的task,並且沒有創建其他優先級的進程,
而且8個task每個task都不會調用任何引起本task從就緒運行隊列鏈表中被摘掉的系統函數,就像示例中
vStartIntegerMathTasks()創建vCompeteingIntMathTask1(),vCompeteingIntMathTask2()...vCompeteingIntMathTask8()一樣,
每個task都是不會睡眠的不停的執行自己,當每個task覺得自己佔用cpu的時間已經差不多的時候,
就會調用taskYIELD(),主動讓出cpu,讓同優先級的其他task獲得cpu,因爲沒有其他優先級的task,所以調度器不會切換優先級,
而是採用輪轉調度策略,運行同優先級的就緒運行隊列鏈表中調用taskYIELD()函數的當前task的下一個task.
就這樣8個task輪流讓出cpu給同優先級的下一個兄弟task,8個task都採用主動協作的方式,彼此安全順利的跑了起來.
2.xLIST()
雖然在vListInitialise()初始化時,將pxList->xListEnd初始化爲了"雙向循環鏈表",
但是在諸多使用中,如:listGET_OWNER_OF_NEXT_ENTRY()中,都會以xListEnd作爲雙向循環鏈表的象徵性結尾標誌,
所以看上去只是雙向鏈表,而不是循環鏈表.