• 请不要在回答技术问题时复制粘贴 AI 生成的内容
sillyousu
V2EX  ›  程序员

Paper 分享:使用 setjmp longjmp signal stack 实现 c 协程

  •  
  •   sillyousu ·
    sillyousu · Dec 3, 2015 · 3409 views
    This topic created in 3842 days ago, the information mentioned may be changed or developed.
    最近在 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 )
    2 replies    2015-12-04 08:46:39 +08:00
    leavic
        1
    leavic  
       Dec 3, 2015
    这和我 3 年前做的一个简易 rtos 原型一个原理,总的来说,这玩意可以玩玩,不能用。
    nareix
        2
    nareix  
       Dec 4, 2015
    makecontext 的移植性挺好的啊
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   6042 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 06:17 · PVG 14:17 · LAX 23:17 · JFK 02:17
    ♥ Do have faith in what you're doing.