我想在 Linux 环境中实现符合 POSIX 标准的微线程。基本思路如下:
- 使用此处描述的技术,为每根光纤分配新的堆栈空间。
- 使用 setitimer,创建将在恒定时间间隔内发送信号的计时器。此计时器的信号处理程序将充当调度程序并在光纤之间切换。
问题是,在信号处理程序中执行 longjmp 不会终止处理程序,因此内核将等待它的终止,而不是传递新信号。这使得切换上下文变得不可能,因为没有信号可以启动切换。一种解决方案是取消阻塞 SIGALRM,这样许多信号可以同时执行处理程序,但这会导致竞争条件问题。
实现抢占式微线程的最佳和最简单的方法是什么?我在谷歌上找到的所有例子都不是先发制人的。