c - sighandler 中的问题

标签 c multithreading

我正在创建一个用户级线程库,实现抢占式循环调度程序。我有这样的处理函数:

 void handler(int signum)
 {
   gtthread_yield();   
 }

在gtthread_yield中,我正在进行上下文切换以切换到下一个要执行的线程。在大多数情况下,逻辑工作得很好。但是,即使在 gtthread_yield 函数(从ighandler 调用)完成执行之前发出信号,我也会遇到段错误。因此,我的代码访问无效的内存位置(我已经释放的内存)

是否有任何方法可以避免在 gtthread_yield 函数完成执行之前引发处理程序?

谢谢

最佳答案

使用sigaction()及其助手(sigemptyset()sigfillset()sigaddset() 等)在处理程序正在进行时阻止信号。这可能是必要的一步;这可能还不够。如果这还不够,您可能需要修改信号处理,以便它在返回之前除了 volatile sig_atomic_t 变量之外几乎不执行任何操作。然后,调用代码必须查看原子变量,并在设置时调用 gtthread_yield()(记住从 gtthread_yield() 返回后清除该变量。

关于c - sighandler 中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7604771/

相关文章:

c - 无法通过cmd2运行c程序

java - 基于声明为 "final static Object"的对象与简单的 "final Object"进行同步

swift - 在 swift 中连续运行线程而不阻塞主线程

c - gcc 的 -Wc90-c99-compat 标志如何工作?

c - 在哪里可以找到 stdio.h 函数实现?

c - 使用 C 和动态分配从 CSV 读取和保存值

c++ - 通缉 : Elegant solution to race condition

c - 为 union 分配内存以及 union 指针和指针 union 之间的区别

java - 使用 for(boolean haveNext = false;;) 而不是 while(cond)

c++ - 使用线程c++执行shell命令