相关疑难解决方法(0)

有什么东西可以替换<ucontext.h>函数吗?

<ucontext.h>不推荐使用用户线程函数,因为它们使用不推荐的C 函数(它们使用带有空括号的函数声明作为参数).

它们有标准替代品吗?我不认为成熟的线程擅长实现协作线程.

c posix user-thread

22
推荐指数
3
解决办法
7325
查看次数

Longjmp退出信号处理程序?

从问题:

在C中使用setjmp和longjmp是不错的编程习惯?

其中两条评论说:

"你不能在信号处理程序中抛出异常,但你可以安全地做一个longjmp - 只要你知道你在做什么. - Dietrich Epp 8月31日19:57 @Dietrich:+1你的评论.这是一个鲜为人知且完全不被重视的事实.在不使用信号处理程序的longjmp的情况下,有许多问题无法解决(令人讨厌的竞争条件).阻塞系统调用的异步中断是典型的例子."

我的印象是内核在遇到异常情况时调用信号处理程序(例如除以0).此外,如果您专门注册它们,它们只会被调用.

这似乎意味着(对我来说)它们不会通过您的正常代码调用.

继续这个想法...我理解的是setjmp和longjmp用于将堆栈折叠到先前的点和状态.我不明白在调用信号处理程序时如何折叠堆栈,因为它从内核调用作为一次性环境而不是从您自己的代码调用.从信号处理程序到堆栈的下一个东西是什么!?

c unix signals longjmp

16
推荐指数
2
解决办法
6224
查看次数

标签 统计

c ×2

longjmp ×1

posix ×1

signals ×1

unix ×1

user-thread ×1