我正在开发一种类似于c++的小型语言,我将把它编译成LLVM。我想要实现的事情之一是协作多任务;将有一个“让步”操作符,它有望将堆栈指针和程序计数器切换到我程序中的下一个“线程”。
在llvm中可以做到这一点吗?我可以设置堆栈指针寄存器吗?如果没有,还有其他类似的事情我可以做吗?
编辑:https://internals.rust-lang.org/t/llvm-coroutines-to-bring-awarness/3708/12协程(http://llvm.org/docs/Coroutines.html)听起来很有前途,尽管LLVM带来了一些关于堆栈或无堆栈协程的问题。我想知道,它们是否可以用来实现一个通用的类似收益的运算符?
编辑2:在c++ boost中有一个叫做“上下文”的东西,它可以实现堆栈协程。但仍在试图弄清楚他们是如何做到这一点的。有人知道吗?
发布于 2016-09-06 07:09:27
假设您有可用的gcd库:您可以通过使用信号量(dispatch_semaphore_t)轻松地实现协作多任务。设置信号量计数,以便只有一个线程可以同时运行。yield()函数发出信号并立即锁定信号量-- signal()唤醒另一个线程,该锁停止调用yield的线程。
https://stackoverflow.com/questions/39338448
复制相似问题