为了账号安全,请及时绑定邮箱和手机立即绑定

大佬们遇到过这个问题吗?使用setjump loopjump在线程中跳转的问题跪求!

大佬们遇到过这个问题吗?使用setjump loopjump在线程中跳转的问题跪求!

qq_遁去的一_1 2019-07-28 12:31:18
使用setjumploopjump在线程中跳转的问题使用setjump到另一个线程中跳转,跳转成功了,后面的代码不执行了#define_CRT_SECURE_NO_WARNINGS#include#include#include#include#include#include#includejmp_bufbuf;void*print_a(void*);void*print_b(void*);//线程A方法void*print_a(void*a){for(inti=0;i
查看完整描述

2 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

讲真,我没想到还能这么用....
setjmp/longjmpisimplementedbysavingtheregister(includingstackandcodepointeretc)whenfirstpassed,andrestoringthemjumping.
当线程b通过longjmp跳到print_a时,它的栈帧和线程a的栈帧所在的内存就是一个地方了(原来栈的内存没人管)。当线程a退出时,自然要弹出所有栈帧,那么线程b之后对栈访问就是对非法内存的访问了。
就像你把双胞胎中的弟弟的头嫁接到哥哥身上,哥哥变成了连体婴儿,哥哥挂掉之后,弟弟也活不成了,反之也是
                            
查看完整回答
反对 回复 2019-07-28
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

longjmp不能跨线程。
C117.13.2.1/2:
Thelongjmpfunctionrestorestheenvironmentsavedbythemostrecentinvocationofthesetjmpmacrointhesameinvocationoftheprogramwiththecorrespondingjmp_bufargument.Iftherehasbeennosuchinvocation,oriftheinvocationwasfromanotherthreadofexecution,orifthefunctioncontainingtheinvocationofthesetjmpmacrohasterminatedexecutionintheinterim,oriftheinvocationofthesetjmpmacrowaswithinthescopeofanidentifierwithvariablymodifiedtypeandexecutionhasleftthatscopeintheinterim,thebehaviorisundefined
                            
查看完整回答
反对 回复 2019-07-28
  • 2 回答
  • 0 关注
  • 306 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信