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

我正在研究一个小型的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有一些可以实现堆栈协程的“上下文”。 仍然试图弄清楚他们是如何做到的。 有人知道吗?


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

链接地址: http://www.djcxy.com/p/53191.html

上一篇: Can I set the stack pointer in LLVM?

下一篇: Stack allocation for C++ green threads