C setjmp.h和ucontext.h,哪个更好?
嗨,我需要从一个地方跳到另一个地方......
但我想知道哪个更好用,setjmp或ucontext,比如:
setjmp和ucontext是否可移植?
我的代码使用这些库是线程安全的吗?
为什么用另一个呢?
哪个快速又安全?
...(有人可以回答我忘了放在这里的未来问题吗?)
请提供我要求的更多信息,例如示例或一些文档......
我在网上搜索过,但是我只在C语言中得到异常处理,就像setjmp的例子一样,我对ucontex.h一无所知,我得知它用于多任务,它和pthread的区别是什么?
非常感谢。
没有找到相关结果
已邀请:
3 个回复
很缴
是便携式(ISO C89和C99)和
(在SUSv3中过时并从SUSv4 / POSIX 2008中删除)不是。然而,
在规格上要强大得多。实际上,如果你使用
/
和信号处理程序和备用信号处理堆栈的讨厌黑客,你可以使它们与
一样强大,但它们不是“可移植的”。 也不应该用于多线程。为此目的POSIX线程(pthread函数)。我有几个理由说这个: 如果您正在编写线程代码,那么您也可以让它实际并发运行。我们正在达到非并行计算的速度限制,未来的机器将越来越平行,所以利用它。
已从标准中删除,未来的操作系统可能不支持(或者甚至是现有的操作系统?) 滚动自己的线程不能对您可能想要使用的库代码透明。它可能会破坏对并发,锁定等做出合理假设的库代码。只要您的多线程是合作的而不是基于异步信号的,那么可能没有太多这样的问题,但是一旦你深入了解不可移植的问题黑客的东西会变得非常脆弱。 ......可能还有一些我现在想不到的理由。 :-)
厘恼轨
才改隘瘁
可移植到所有托管的C实现;
函数是POSIX的XSI扩展的一部分 - 这使得
更加便携。 可以以线程安全的方式使用
。在线程程序中使用
函数没有多大意义 - 您将使用多个线程而不是多个上下文。 如果要从深度嵌套的函数调用中快速返回,请使用
(这就是为什么您发现大多数示例显示其用于异常处理的原因)。使用
函数实现用户空间线程或协同程序(或根本不使用它们)。 “快速而安全”的问题毫无意义。这些实现通常与实现它们的速度一样快,但是它们执行不同的功能,因此无法直接比较(
函数执行的工作更多,因此通常会稍微慢一些)。 请注意,在最新版本的POSIX中,
函数被列为过时。通常应该使用pthreads线程函数。