我是否需要为每个C POSIX线程使用不同的Sigset来确保屏蔽信号时的原子性?

我是否需要为每个C POSIX线程使用不同的Sigset来确保屏蔽信号时的原子性?,c,linux,multithreading,unix,posix,C,Linux,Multithreading,Unix,Posix,如果我要屏蔽和取消屏蔽的信号在所有线程之间都是公共的,我可以使用一个全局变量将POSIX C中的信号集传递给pthread_sigmask,还是每个线程都应该有不同的sigset?pthread_sigmask()的第二个参数是常量(const sigset_t*set)[这意味着,set所指向的内存将不会被修改],因此您可以声明单个[可能是全局的,您认为]变量,而无需在访问它时实现任何线程锁定机制,因为它不会被修改。所有线程将始终从中读取相同的[一致]值 您可以声明如下内容: /* Globa

如果我要屏蔽和取消屏蔽的信号在所有线程之间都是公共的,我可以使用一个全局变量将POSIX C中的信号集传递给pthread_sigmask,还是每个线程都应该有不同的sigset?

pthread_sigmask()的第二个参数是常量(
const sigset_t*set
)[这意味着,
set
所指向的内存将不会被修改],因此您可以声明单个[可能是全局的,您认为]变量,而无需在访问它时实现任何线程锁定机制,因为它不会被修改。所有线程将始终从中读取相同的[一致]值

您可以声明如下内容:

/* Global scope */
sigset_t g_set;
并将其传递给
pthread\u sigmask()


谢谢你的回复。我忘了查找pthread_sigmask的参数,看看哪些是/不是常量。总之,再次感谢你的提醒。
/* Assuming `g_set` is already properly set at this point and won't be modified in the future */
pthread_sigmask(how, &g_set, NULL);