Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 阻止除一个线程外的所有线程处理信号_C_Linux_Multithreading_Signals - Fatal编程技术网

C 阻止除一个线程外的所有线程处理信号

C 阻止除一个线程外的所有线程处理信号,c,linux,multithreading,signals,C,Linux,Multithreading,Signals,在我的应用程序中,我有多个线程,其中一个线程负责捕获信号并处理它们。我的主要问题是,因为操作系统随机拾取进程中的一个线程,并向其传递处理该线程的信号。因此,拾取的线程可能不是负责处理信号的线程 我必须阻止主线程中的信号,任何新线程都将继承主线程的掩码,因此它们将无法处理信号,只有相应的线程才会这样做 谁能给我一个C语言的示例代码,怎么做 我已经编写了与“保持线程睡眠并在收到信号后将其唤醒”相关的部分,您可以找到以下内容。请参阅下文,也可以参阅本文。非常感谢,我尝试阻止所有信号,并使用sigset

在我的应用程序中,我有多个线程,其中一个线程负责捕获信号并处理它们。我的主要问题是,因为操作系统随机拾取进程中的一个线程,并向其传递处理该线程的信号。因此,拾取的线程可能不是负责处理信号的线程

我必须阻止主线程中的信号,任何新线程都将继承主线程的掩码,因此它们将无法处理信号,只有相应的线程才会这样做

谁能给我一个C语言的示例代码,怎么做


我已经编写了与“保持线程睡眠并在收到信号后将其唤醒”相关的部分,您可以找到以下内容。

请参阅下文,也可以参阅本文。非常感谢,我尝试阻止所有信号,并使用
sigset\u t set;sigfillset(&set);pthread_sigmask(SIG_SETMASK,&set,NULL)我在主线程中调用了它,所有其他线程都继承了它。但我的问题是,在所有线程中阻止所有信号还是在每个线程中传递信号更好?你关于阻止还是不阻止的问题实际上超出了我对信号、linux线程和实际应用程序的了解。一般来说,线程倾向于专注于某个特定任务,因此您希望将与该任务相关联的信号指定给该线程,并为其他线程阻塞。通常,如果您有一个通用信号线程,那么它的唯一用途就是确定需要向其他线程发送哪些通知,以便通用线程充当一种调度器。我想为这种架构找到一个很好的理由,因为它可能会导致复制。每个进程都会发送信号,所以不能在每个线程的基础上发送信号。