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

Do I need A Different Sigset For Each C POSIX Thread To Ensure Atomicity When Masking Signals?

如果我要屏蔽和取消屏蔽的信号在所有线程之间是通用的,我可以使用一个全局变量作为 POSIX C 中设置的信号传递给 pthread_sigmask,还是应该有为每个线程设置不同的 sigsets?

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

你可以这样声明:

/* Global scope */
sigset_t g_set;

并将其传递给 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);