5

我正在研究一种类似 c++ 的小型语言,我将编译到 LLVM。我想要实现的一件事是协作式多任务处理;将会有一个“yield”操作符,它有望将堆栈指针和程序计数器切换到我程序中的下一个“线程”。

可以在llvm中做到这一点吗?我可以设置堆栈指针寄存器吗?如果没有,我还能做其他类似的事情吗?

编辑:LLVM 协程(http://llvm.org/docs/Coroutines.html)听起来很有希望,尽管https://internals.rust-lang.org/t/llvm-coroutines-to-bring-awarness/3708/12提出了一些关于堆栈或无堆栈协程的问题。我想知道,它们可以用来实现一个通用的类似产量的运算符吗?

编辑 2:在 c++ 中,boost 有一个叫做“上下文”的东西,它可以实现堆栈协程。仍然试图弄清楚他们是如何做到的。有人知道吗?

4

1 回答 1

-1

假设您有gcd可用的库:您可以使用信号量 ( dispatch_semaphore_t) 轻松实现协作式多任务处理。设置信号量计数以便您的一个线程可以同时运行。该yield()函数发出信号并立即锁定信号量 -signal()唤醒另一个线程,并且锁定停止调用的线程yield

于 2016-09-05T23:09:26.737 回答