问题标签 [sig-atomic-t]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1085 浏览

c++ - 我可以使用 volatile sig_atomic_t 来避免 C++03 中的互斥锁吗?

如果我在具有原子读取和递增/递减支持的硬件上,我可以volatile sig_atomic_t在 C++03 中使用 a 来访问原子操作并避免完全成熟的互斥锁,还是必须等待 C++11 和std::atomic<int>

0 投票
1 回答
1338 浏览

c - C 在头文件中使 volatile sig_atomic_t 全局化

我正在尝试创建一个全局变量,在我的 msh.c 文件中初始化为:

仅此一项似乎还不错。但是,如果我转到我的 proto.h 文件(该文件包含在该项目的所有 c 文件中),然后键入:

它抛出了一堆错误:

我究竟如何使这个变量成为全局变量?谢谢。

0 投票
1 回答
106 浏览

c - 演示在信号处理过程中不使用 volatile 关键字时编译器的优化效果?

在下面的代码中,我没有使变量quithas volatile sig_atomic_t。我把它作为一个平原int

由于该quit变量未指定为volatile,因此我期望编译器的优化器会将while代码中的 -loop 优化为:

但我不认为这会发生。在一个终端上,我运行以下命令。

在另一个终端上,我将 SIGUSR1 发送到我的程序。

在第一个终端上,输出显示程序的信号处理程序被调用并且while-loop 退出。

quit由于不存在,我如何证明循环的优化volatile

0 投票
1 回答
1180 浏览

c - 在信号处理的上下文中,哪些变量需要是 sig_atomic_t ?

这是一个简单的玩具程序,它使用volatile sig_atomic_t.

我想我知道为什么这个特定程序中的变量volatile sig_atomic_t是必要的。quit

  1. 如果没有volatile,编译器可能会优化while (!quit) ;为无限循环。它没有发现循环正在修改quit,因此它假定quit始终保持不变0
  2. 更新quit或读取quit应该发生在单个机器指令中。如果更新或读取需要多条机器指令quit,那么如果在更新进行时调用信号处理程序,则信号处理程序中的读取可能会在quit.

到目前为止我是正确的吗?如果没有,请在您的回答中纠正我。

现在我想学习sig_atomic_t在信号处理的上下文中何时需要的通用规则。Jonathan Leffler 在评论中解释说,提供一个概括并不容易。

您能否提供一个已知场景的列表,其中需要sig_atomic_t从 C 标准的角度定义变量?它不必是详尽的清单。它可能是经验不足的开发人员在使用信号处理代码编写 C 软件时可以参考的列表。