我正在嘗試與C進行協同程序和延續。我意識到我需要某種意大利麪條堆棧。是否有可能在新的調用堆棧中執行一個函數?當然在單線程內。我該如何創建一個新的獨立的調用堆棧並在其上執行一些代碼?如何用C做意大利式麪條?
3
A
回答
0
我仍然不確定延續,但至少對於協程來說,在C內部沒有好的方法。因爲這不是C抽象。 setjmp/longjmp
有限制範圍可能會破壞C++/Objective-C異常系統,makecontext/swapcontext
已被棄用。雖然有些系統仍然支持這些功能,但至少Apple OS不再支持它。
我唯一可以接受的解決方案是libtask
library。它使用體系結構特定的彙編代碼來保存和恢復寄存器狀態,並且還管理調用堆棧。我認爲它使用單片堆棧,但仍然有大小限制,但無論如何,它幾乎是唯一可以找到可靠工作的解決方案。
我認爲Clang's Segmented Stack(或GCC的拆分堆棧)功能將在C級別啓用非常通用的協程支持。我希望以後可以隨時在LLVM上編寫協程代碼。
5
check out makecontext/swapcontext。
如果這些都不可用,那麼你可以使用setjmp/longjmp,但這些更復雜一點。
2
如果您在Windows上,您可以查看Fibers API。但是,Evil Otto的答案更符合便攜/ POSIX標準。
相關問題
- 1. 熊貓數據框與重複序列:如何做一個意大利麪條?
- 2. java中的標籤是做意大利麪代碼嗎?
- 3. 如何獲得在下面的MLP意大利千層麪
- 4. 意大利麪條代碼可視化軟件?
- 5. 意大利麪條路線和邀請編碼Bolognese
- 6. 將意大利麪代碼轉換爲枝條
- 7. 該代碼(「setTimeout-s」的意大利麪條)可以如何重寫?
- 8. 意大利格式獲取日期格式爲「LunedìGG/MM」如何?
- 9. 意大利麪包屑drupal 7
- 10. 避免意大利麪代碼(gamestatemanager)
- 11. MySQLi交易意大利麪地獄
- 12. 如何讓R#不能重新格式化ASP.NET MVC意大利麪代碼
- 13. iOS:NSDateFormatter地區格式意大利
- 14. 將意大利語和意大利語轉換爲蟒碼數
- 15. 在意大利麪條代碼庫上使用什麼php框架?
- 16. Intent-filter:如何只接受包含單詞「意大利麪條」的文本/純文本意圖
- 17. 意大利千層麪 - 意外的關鍵字錯誤
- 18. 如何在使用完成事件時避免意大利麪代碼?
- 19. jVector - 意大利地區
- 20. xyplot()在R,意大利麪條的情節,如何使蜱在某一點每一個人
- 21. 如何在textarea外面做滾動條?
- 22. 如何確定或判斷一組類是否爲「意大利麪代碼」?
- 23. 重複測量R中的意大利麪情節
- 24. 意大利麪代碼,處理異常處理和錯誤?
- 25. 圖像分析:分離相交的意大利麪
- 26. NEWBIE,這是變成意大利麪代碼嗎?
- 27. 解開彙編語言意大利麪代碼
- 28. proc gplot超過255個主題的意大利麪情節
- 29. Javascript,與意大利麪代碼和組織的問題
- 30. 從意大利麪代碼遷移到Symfony 2