如果我想要屏蔽和取消屏蔽的信号在所有线程之间是通用的,我可以使用 POSIX C 中的信号集的一个全局变量来传递给 pthread_sigmask,还是每个线程应该有不同的信号集?
最佳答案
pthread_sigmask()
的第二个参数是常量 (const sigset_t *set
) [意味着 set
指向的内存不会被已修改],因此您可以声明一个[可能是全局的,根据您的意见]变量,而无需在访问它时实现任何线程锁定机制,因为它不会被修改。所有线程将始终从中读取相同的[一致]值。
您可以声明如下内容:
/* 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);
关于c - 我是否需要为每个 C POSIX 线程使用不同的签名集以确保屏蔽信号时的原子性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38687749/