gpt4 book ai didi

c - sighandler 中的问题

转载 作者:行者123 更新时间:2023-11-30 19:24:06 25 4
gpt4 key购买 nike

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

 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com