我可以在LLVM中设置堆栈指针吗?

时间:2016-09-05 22:39:28

标签: llvm coroutine llvm-clang boost-context

我正在研究一种类似于c ++的小语言,我将编译成LLVM。我想要实现的一件事是合作多任务处理;会有一个"产量"操作符,希望将堆栈指针和程序计数器切换到下一个"线程"在我的计划中。

是否可以在llvm中执行此操作?我可以设置堆栈指针寄存器吗?如果没有,我还能做其他类似的工作吗?

编辑:LLVM协同程序(http://llvm.org/docs/Coroutines.html)听起来很有希望,但https://internals.rust-lang.org/t/llvm-coroutines-to-bring-awarness/3708/12提出了有关堆栈或无堆栈协程的一些问题。我想知道,他们可以用来实现一般类似收益的算子吗?

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

1 个答案:

答案 0 :(得分:-1)

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