我應該實現C的用戶級線程庫要做到這一點,我需要實現yield()
,createThread()
和destroyThread()
功能。我相信我已經掌握了一些基本權利:線程在用戶空間和產量
要跟蹤的線程,我將使用ThreadControlBlock
元素(在操作系統類似PCBs)看起來像這樣的隊列:
struct ThreadControlBlock {
int ThreadId,
u_context *context };
我們可以使用setcontext()
系列功能來「保存」和「加載」上下文。 程序初始化時,不使用元素初始化ThreadQueue。
現在我沒有得到的部分:當一個線程調用yield()
時,我得到當前上下文並將它保存在一個ThreadControlBlock
並放入隊列中。然後獲取隊列中的第一個元素並在其中加載上下文,然後繼續執行。
的問題是,如果我這樣做,說我是一個線程調用yield()
和下一個線程就是我自己。如果我保存上下文並重新加載,重新進入後我不會和我在同一個地方(在致電yield()
之前?)這會一直持續下去嗎?
+1相關的示範性問題到家庭作業,這不僅僅是「請爲我做作業」。這個問題本身就是一個有趣的問題,它是任務上下文切換實際工作的核心。 – RBerteig 2010-09-23 20:23:17