在挖掘cont.c
Ruby 当前版本的代码时,我想知道这一点。的文档setjmp
说,在返回的调用者之后longjmp
调用jmp_buf 结构是一个错误。但是,Ruby 似乎很高兴地做到了这一点并且没有崩溃:setjmp
https://github.com/ruby/ruby/blob/05f087c844f0e1e7cfe323edcf591de64069a289/cont.c#L522 https://github.com/ruby/ruby/blob/05f087c844f0e1e7cfe323edcf591de64069a289/cont.c#L775(+ 更多纤维的使用) )
我问:这怎么可能?
我确实注意到相同的源代码也使用了set/getcontext
,但似乎只使用了 fiber 。在我看来,使用这些函数而不是set/longjmp
.