在函數執行過程中,是否完全可能設置一個指向當前棧的指針(稍後將被拾取),然後釋放當前線程(無需展開調用棧)並將其返回給線程池?然後,有另一個線程拿起那個線程停止的地方?我知道這意味着調用函數的人不會知道當前的線程上下文會發生變化,並且可能會涉及編寫一些自定義的IL代碼來執行此類操作,但有沒有辦法執行此操作?在.NET中,調用堆棧與線程不可分割嗎?
1
A
回答
8
不,堆棧是線程狀態的一部分。您可以使用異步工作流來執行此類操作(並且CCR使這更容易),但是您不能只將線程返回到線程池。
你可以編寫一個線程池,其中做這樣做,但它會是一個壞主意IMO - 這將是調用Application.DoEvents IMO的線程池等效。
5
你所描述的是分隔延續。令人遺憾的是,CLR對此沒有支持,並且無法用我所知的任何技巧在託管代碼(甚至不是混合代碼)中實現。
目前,我需要IronScheme中的這個功能。有一些方法可以在CLR上創建這種功能,方法是編寫一個CPS轉換的編譯器,但這會導致大量的互操作性問題(不能直接調用.NET函數等)。
我在IronScheme中做了一些CPS轉換的實驗,但是我現在的編譯器並不適合這個,而且執行速度很慢。
相關問題
- 1. 如何在perfiew的調用樹中分組線程堆棧
- 2. 線程堆棧分配
- 3. 程序訪問調用堆棧.net
- 4. 堆棧指針和分割
- 5. 如何終止已調用堆棧損壞的.NET線程?
- 6. 最大線程堆棧大小.NET?
- 7. 調用堆棧不給線索
- 8. 線程堆和堆棧
- 9. pthread_cancel釋放線程堆棧嗎?
- 10. C++堆棧與堆分配
- 11. 調用setTimeout清除調用堆棧嗎?
- 12. 與堆棧分析
- 13. 將堆棧複製到沒有分割的堆棧錯誤
- 14. 在Java中的新線程上調用堆棧信息
- 15. 主線程沒有調用堆棧的Java線程轉儲? (jsvc)
- 16. 堆棧跟蹤在調用堆棧中用下劃線替換名稱
- 17. 協程調用堆棧
- 18. 與線分割
- 19. 繪製堆棧和線程程序堆
- 20. 堆棧或堆棧分配不正確
- 21. 調用堆棧
- 22. 使用setrlimit()在具有拆分堆棧的多線程應用程序中增加堆棧空間
- 23. Haskell中的延期與調用堆棧
- 24. 在.net中堆棧和堆內存分配
- 25. POSIX線程堆棧內存 - 我們可以有不同的堆棧大小和安全問題嗎?
- 26. 線程的奇怪堆棧
- 27. 線程堆棧指針
- 28. 線程堆棧錯誤
- 29. 我可以使用堆棧在特定地址創建線程嗎?
- 30. 捕獲調用堆棧,並讓它在不同的線程中執行
你能發佈更多關於你正試圖解決的問題的信息嗎? – cbrulak 2009-02-02 17:19:15