C setjmp.h和ucontext.h,哪个更好?

dri*_*ker 4 c setjmp

嗨,我需要从一个地方跳到另一个地方......

但我想知道哪个更好用,setjmp或ucontext,比如:

  • setjmp和ucontext是否可移植?
  • 我的代码使用这些库是线程安全的吗?
  • 为什么用另一个呢?
  • 哪个快速又安全?
  • ...(有人可以回答我忘了放在这里的未来问题吗?)

请提供我要求的更多信息,例如示例或一些文档......

我在网上搜索过,但是我只在C语言中得到异常处理,就像setjmp的例子一样,我对ucontex.h一无所知,我得知它用于多任务,它和pthread的区别是什么?

非常感谢.

R..*_*R.. 5

setjmp便携式(ISO C89和C99)和ucontext(过时的SUSv3并从SUSv4/POSIX 2008中删除)不是.但是ucontext规格要强得多.在实践中,如果你使用带有setjmp/ longjmp和信号处理程序以及备用信号处理堆栈的恶劣黑客,你可以使它们具有同样强大的功能ucontext,但它们不是"可移植的".

也不应该用于多线程.为此目的POSIX线程(pthread函数).我有几个理由说这个:

  • 如果您正在编写线程代码,那么您也可以让它实际并发运行.我们正在达到非并行计算的速度限制,未来的机器将越来越平行,所以利用它.
  • ucontext 已从标准中删除,未来的操作系统可能不支持(或者甚至是现有的操作系​​统?)
  • 滚动自己的线程不能对您可能想要使用的库代码透明.它可能会破坏对并发,锁定等做出合理假设的库代码.只要您的多线程是合作的而不是基于异步信号的,那么可能没有太多这样的问题,但是一旦你深入了解不可移植的问题黑客的东西会变得非常脆弱.
  • ......可能还有一些我现在想不到的理由.:-)