c - 信号“自动阻塞”(当执行进入处理函数时)是否会阻止另一个这样的信号被传递到另一个线程?
问题描述
信号掩码是线程特定的,这意味着阻塞信号不会阻止它被传递到另一个没有阻塞该信号的线程。当执行进入处理函数(假设没有SA_NODEFER
)“当前”信号被阻塞。
这是否意味着它将被当前进程中的所有线程阻塞,或者下一个这样的信号可能被传递给另一个线程(虽然它仍在第一个线程中处理)?
解决方案
阅读man sigaction
:
sa_mask
指定在信号处理程序执行期间应被阻塞的信号掩码(即,添加到调用信号处理程序的线程的信号掩码)。此外,除非使用该SA_NODEFER
标志,否则触发处理程序的信号将被阻止。
这听起来像是对当前处理的信号的屏蔽只影响处理线程,因此其他线程可能会处理更多的信号。
我认为多线程系统通常会阻止所有线程的所有信号,除了一个(或几个)专用信号处理线程(例如,轮询 signalfd 的线程)。这样你就不必担心信号会落在一些不可预测的线程上。
推荐阅读
- javascript - 如何动态地将方法添加到 javascript 对象而不会出现这个奇怪的错误
- javascript - 将一个数组与另一个数组进行比较并添加一个计数器
- java - Promotheus 无法从自定义 Rest Endpoint 读取指标
- r - 一次为每个变量制作密度曲线图的有效方法?
- javascript - React Native Windows 应用程序加载错误 (80072f78)
- javascript - echo php 中的错误包含代码 html 解析错误:语法错误,意外的“:”
- c - 做 fgets 剥离换行符的宏
- javascript - 如何防止使用功能组件重新渲染并反应钩子?
- python - IBM Personality Insights 语法错误
- blazor - 对控制器的 HttpClient 请求返回“不支持提供的 ContentType ...”