我想知道这一点的同时通过代码挖掘cont.c
在Ruby的当前版本。 的文档setjmp
说,调用longjmp
在jmp_buf结构的来电后 setjmp
返回是一个错误。 但是,似乎红宝石愉快地做到这一点并不会崩溃:
https://github.com/ruby/ruby/blob/05f087c844f0e1e7cfe323edcf591de64069a289/cont.c#L522 https://github.com/ruby/ruby/blob/05f087c844f0e1e7cfe323edcf591de64069a289/cont.c#L775 (+一对夫妇更用法与纤维)
我问:怎么可能?
我也注意到,相同的源代码的使用也set/getcontext
,但只能用纤维或者看起来是这样。 这似乎更合理的,我要使用这些功能,而不是set/longjmp
。