如何将同步阻塞共享内存模型代码转换为在线程池上运行的异步协同程序?

时间:2013-03-07 12:29:20

标签: pthreads threadpool green-threads

虽然有很多解决方案部分匹配我的问题,但我想知道是否存在完全匹配。很难找到完整的解决方案,因为这些部分解决方案会占用搜索结果。这应该是一个运行时框架,并且(可选)当语言不支持协程时,需要转换源语言代码。

像lthread这样的库有lthread_cond_wait()API,但是每个lthread都受到单个pthread的限制。我希望轻量级线程能够在几个pthreads中运行。它们应该由线程池任意挑选。单线程调度程序或全局锁定调度程序都不匹配。我想我们可以做得更好。

lthreads也不是一个选项,因为它既不涉及源代码转换,也不像protothreads那样避免它。

几个绿色线程运行时(Erlang,Limbo)不匹配,因为它们仅限于CSP(通信顺序进程)模型,但我也想拥有共享内存模型同步原语:互斥,条件变量,rwlocks。

转型涉及:

  1. 将堆栈上下文转换为堆中的对象
  2. 将互斥锁调用转换为操纵禁用和激活线程池和发布订阅
  3. 上的作业
  4. 条件变量也应转换为发布 - 订阅实现
  5. 拥有Ada风格的约会
  6. 会很不错

    由于在不使用全局锁或单个调度程序线程的情况下发布 - 订阅机制中可能存在死锁,我无法直接执行运行时实现,但我仍然认为这是可能的。

1 个答案:

答案 0 :(得分:0)

免责声明:lthread作者。

你可以启动几个pthread并在每个pthread中运行一个lthread调度程序(这是通过在pthread函数中调用lthread_run()自动完成的)。这样每个pthread都会运行一堆lthread。