gpt4 book ai didi

c++ - 是否可以在进程中的所有线程上设置 pthread_sigmask?

转载 作者:行者123 更新时间:2023-11-30 17:38:42 26 4
gpt4 key购买 nike

这是 this question 的后续内容我已经查看了相关问题。

我仍在尝试在收到 SIGTERM 时进行一些清理,然后达到 TERM 的效果,这是进程中没有线程等待时的默认行为对于信号,并且没有定义信号处理程序。

在前面的问题中,我假设信号在多线程应用程序中具有确定性行为,但经过一些非确定性结果和一些研究后,我意识到这不是一个安全的假设。

我的应用程序是多线程的,并且通过 sigactionsignal 使用普通信号处理程序会产生不确定的结果,因为任意选择实际上会中断哪个线程来运行信号handler 对信号处理程序的操作很重要(它正在清理一些线程,如果错误的线程被中断,这些线程可能会死锁)。

因此,我转而做synchronous signal handling 。特别是,我在启动线程中使用 pthread_sigmask 阻止 SIGTERM,然后在实际执行清理的线程中调用 sigwait() 。但是,在 sigwait() 在线程中返回并完成清理后,我尝试以下操作:

kill(getpid(), SIGTERM);

但是,这个信号显然被忽略了,因为所有其他事件线程都在阻塞 SIGTERM。因此,在从清理线程正在运行的函数返回之前,我需要在所有其他线程中解锁信号。是否有函数调用可用于在其他线程上设置pthread_sigmask

最佳答案

没有调用可用于在其他线程上设置信号掩码。接收到的信号是一个触发器,重新发送该信号本身是没有意义的。尝试改用 pthreads条件变量

关于c++ - 是否可以在进程中的所有线程上设置 pthread_sigmask?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22057139/

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