我想在Linux环境中实现符合POSIX标准的微线程。基本思路如下:
问题是,在信号处理程序中执行longjmp不会终止处理程序,因此内核将等待它的终止,而不是传递新信号。这使得切换上下文不可能,因为没有信号来启动交换机。 一种解决方案是解锁SIGALRM,因此许多信号可以同时执行处理程序,但这会导致竞争条件问题。
实施抢先式微线程的最佳和最简单的方法是什么?我在Google上找到的所有示例都不是先发制人的。
答案 0 :(得分:3)
解决方案是使用sigsetjmp / siglongjmp,而不是setjmp / longjmp。 sig *版本保留信号掩码:)