2009-02-02 48 views
1

在函數執行過程中,是否完全可能設置一個指向當前棧的指針(稍後將被拾取),然後釋放當前線程(無需展開調用棧)並將其返回給線程池?然後,有另一個線程拿起那個線程停止的地方?我知道這意味着調用函數的人不會知道當前的線程上下文會發生變化,並且可能會涉及編寫一些自定義的IL代碼來執行此類操作,但有沒有辦法執行此操作?在.NET中,調用堆棧與線程不可分割嗎?

+0

你能發佈更多關於你正試圖解決的問題的信息嗎? – cbrulak 2009-02-02 17:19:15

回答

8

不,堆棧是線程狀態的一部分。您可以使用異步工作流來執行此類操作(並且CCR使這更容易),但是您不能只將線程返回到線程池。

你可以編寫一個線程池,其中這樣做,但它會是一個壞主意IMO - 這將是調用Application.DoEvents IMO的線程池等效。

5

你所描述的是分隔延續。令人遺憾的是,CLR對此沒有支持,並且無法用我所知的任何技巧在託管代碼(甚至不是混合代碼)中實現。

目前,我需要IronScheme中的這個功能。有一些方法可以在CLR上創建這種功能,方法是編寫一個CPS轉換的編譯器,但這會導致大量的互操作性問題(不能直接調用.NET函數等)。

我在IronScheme中做了一些CPS轉換的實驗,但是我現在的編譯器並不適合這個,而且執行速度很慢。