最近在 lug 看到有人发了这 paper
http://xmailserver.org/rse-pmt.pdf 大概原理是:
1. 把 函数指针 放在全局变量
2. 在 signal handler 里面用 setjmp 保存 context
3. sigreturn 后 longjmp 回去
4. 回到了 signal handler 的上下文,调用步骤 1 的 routine
优点
1. 可以移植性非常好
缺点
1. 创建上下为比较复杂,按照论文的说法,会比 makecontext 慢 15 倍
2. signal handling 过程会在 signal stack 上保留一些信息,导致栈空间浪费
3. 某些系统 longjmp 会误判 我们在跳转到一个已经退出的 stack 而触发错误(论文说法是控制流回交给一个 error handler )
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/240863
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.