Ruby的Continuation中的Setjmp / longjmp

时间:2015-02-17 19:16:15

标签: c ruby continuations longjmp setjmp

在Ruby的当前版本中挖掘cont.c的代码时,我对此感到疑惑。 setjmp的文档说明在返回longjmp的调用者之后,在jmp_buf结构上调用setjmp是一个错误。但是,看起来Ruby很快乐地做到了并且没有崩溃:

https://github.com/ruby/ruby/blob/05f087c844f0e1e7cfe323edcf591de64069a289/cont.c#L522 https://github.com/ruby/ruby/blob/05f087c844f0e1e7cfe323edcf591de64069a289/cont.c#L775 (+多用纤维)

我问:这怎么可能?

我确实注意到相同的源代码也使用了set/getcontext,但只有光纤或者看起来如此。使用这些函数而不是set/longjmp对我来说似乎更合理。

0 个答案:

没有答案