Я хочу, чтобы языковой адвокат сказал наверняка, но я подозреваю, что это приведет к неопределенному поведению, если вы попытаетесь longjmp()
из потока в jmp_buf
, созданный другим потоком.
Моя причина в том, что два потока обычно имеют совершенно разные стеки, и, по крайней мере, на MSVC x64 setjmp()
сохраняет rbp
и rsp
, которые являются указателями на текущий стек. Конечным результатом этого является то, что поток, который вызывает longjmp()
, выйдет из setjmp()
с указателем стека и указателем кадра, указывающим на середину стека другого потока.
На планете Земля нет никакого способа, которым эта ситуация может хорошо закончиться.