0

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

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

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

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

转型包括:

  1. 将堆栈上下文转换为堆中的对象
  2. 将互斥调用转换为在线程池和发布-订阅上操作禁用和激活作业
  3. 条件变量也应该转换为发布-订阅关系
  4. 有艾达式的约会会很好

由于发布-订阅机制中的潜在死锁而没有使用全局锁或单个调度程序线程,我未能进行直接的运行时实现,但我仍然认为这是可能的。

4

1 回答 1

0

免责声明:lthread作者。

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

于 2013-03-28T23:54:06.983 回答