gpt4 book ai didi

c++ 多线程 - 信号处理器线程

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:10 25 4
gpt4 key购买 nike

http://pubs.opengroup.org/onlinepubs/009604499/functions/sigprocmask.html

文档显示了示例,其中所有需要等待 的信号都存储在全局范围变量中(在 main() before 信号线程启动时填充。在示例信号线程开始之后 SIG_BLOCK 阻塞信号。

它是否正确并且不会导致一些未定义的行为或崩溃,如果我将在 之前 SIG_BLOCK 在 main() 阻塞信号然后我将创建我的信号线程阻止所有其他新创建线程的信号?

最佳答案

只要信号线程显式地阻塞它最终会用 sigwait 等待的信号,那么它就是安全的。

例如下面两个流程例子都是安全的:

main:
create_signal_thread() // Inherits mask from main, so signals are not blocked.
block_signals()
create_more_threads() // Inherit mask from main, so signals are blocked.

signal_thread:
block_signals() // Must block signals, as this thread will wait on them.
sigwait() // Behavior is defined.

main:
block_signals()
create_signal_thread() // Inherits mask from main, so signals are blocked.
create_more_threads() // Inherit mask from main, so signals are blocked.

signal_thread:
sigwait() // Behavior is defined.

但是,这个例子并不安全:

main:
create_signal_thread() // Inherits mask from main, so signals are not blocked.
block_signals()
create_more_threads() // Inherit mask from main, so signals are blocked.

signal_thread:
sigwait() // Behavior is undefined.

这是来自 sigwait 的相关摘录:

The signals defined by set will been blocked at the time of the call to sigwait(); otherwise the behaviour is undefined. The effect of sigwait() on the signal actions for the signals in set is unspecified.

关于c++ 多线程 - 信号处理器线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11062387/

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