2013-03-07 17 views
0

雖然有很多解決方案與我的問題部分匹配,但我想知道是否存在完整匹配。由於這些部分內容佔據了搜索結果,因此很難找到完整的解決方案。這應該是一個運行時框架,並且(可選)在語言不支持協程時支持源語言代碼的轉換。如何將同步阻塞共享內存模型代碼轉換爲在線程池上運行的異步協程?

有像lthread這樣的庫有lthread_cond_wait()API,但每個lthread都由一個pthread來限制。我想輕量級的線程能夠運行在幾個pthreads。它們應該被線程池任意選中。單線程調度程序或全局鎖定調度程序不匹配。我認爲我們可以做得更好。

lthreads也不是一種選擇,因爲它既不涉及源代碼轉換,也不像原始線程那樣避免它。

幾個綠色線程運行時(Erlang,Limbo)不匹配,因爲它們僅限於CSP(通信順序進程)模型,但我想要共享內存模型同步原語以及:mutexes,condition變量,rwlocks。

轉型包括:

  1. 轉化堆棧環境爲對象堆
  2. 轉化互斥調用到操縱禁用和線程池和發佈 - 訂閱
  3. 條件變量激活作業也應轉變爲發佈 - 訂閱
  4. 這將是很高興有阿達風格的會合

由於未使用全局鎖定或單個調度程序線程的發佈 - 訂閱機制中的潛在死鎖,我未能做到直接的運行時實現,但我仍然認爲這是可能的。

+0

在過去的時間裏,我發現了MapuSoft AdaMagic(Ada-> C/C++)編譯器。鑑於我們爲RTS提供了互斥體和條件變量,我們可以有很好的會合。另一個發現是延續傳遞C.它將堆棧上下文轉換爲對象,就像所期望的一樣。它們不能一起工作,因爲Ada異常映射到C++異常或C longjmp(),並且CPC不支持任何異常。可能可以解決,但還沒有。另外,CPC調度程序是單線程的。此外,通用混合互斥+ cond解決方案尚未寫入。 – OCTAGRAM 2017-03-06 09:28:35

回答

0

聲明:lthread作者。

您可以啓動幾個pthread並在每個中運行一個lthread調度器(這是通過調用pthread函數中的lthread_run()自動完成的)。這樣每個pthread將運行一堆lthreads。