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

标签 c linux multithreading unix posix

如果我想要屏蔽和取消屏蔽的信号在所有线程之间是通用的,我可以使用 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/

相关文章:

c - 在C中的linux中输出随机数到文件

c - 为什么我的程序直接崩溃了

linux - 在bash中提取没有路径和扩展名的文件基名

c - recv() 接收部分消息的套接字编程问题

multithreading - 每个请求 3 个线程

c++ - DBUS-- 多线程处理

c - 在 Unix 上的 C 中,进程如何在不打开文件的情况下知道它对文件具有哪些权限?

c - 如何将主函数中的反向字符串函数转换为自己的独立函数?

linux - popen ("tar xvf tarball.tar") 在调试中工作但在发布版本中不工作

java - 如何编写可中断的方法