虽然有很多解决方案部分匹配我的问题,但我想知道是否存在完全匹配。由于这些部分占据了搜索结果,因此很难找到完整的解决方案。当语言不支持协程时,这应该是一个运行时框架和(可选)源语言代码所需的转换。
有像 lthread 这样的库具有 lthread_cond_wait() API,但每个 lthread 都由单个 pthread 限制。我希望轻量级线程能够在多个 pthread 中运行。它们应该由线程池任意选择。单线程调度程序或全局锁调度程序不匹配。我认为我们可以做得更好。
lthreads 也不是一个选项,因为它既不涉及源代码转换,也不像 protothreads 那样避免它。
几个绿色线程运行时(Erlang、Limbo)不匹配,因为它们仅限于 CSP(通信顺序进程)模型,但我也希望共享内存模型同步原语:互斥锁、条件变量、rwlocks。
转型包括:
- 将堆栈上下文转换为堆中的对象
- 将互斥调用转换为在线程池和发布-订阅上操作禁用和激活作业
- 条件变量也应该转换为发布-订阅关系
- 有艾达式的约会会很好
由于发布-订阅机制中的潜在死锁而没有使用全局锁或单个调度程序线程,我未能进行直接的运行时实现,但我仍然认为这是可能的。