您可以在信号处理程序内部使用 a long,事实上,您可以使用任何东西。您唯一应该注意的是适当的同步以避免竞争条件。
sig_atomic_t应用于信号处理程序和其余代码之间共享的变量。信号处理程序“私有”的任何变量可以是任何类型、任何大小。
示例代码:
#include <signal.h>
static volatile long badShared; // NOT OK: shared not sig_atomic_t
static volatile sig_atomic_t goodShared; // OK: shared sig_atomic_t
void handler(int signum)
{
int localInt = 17;
long localLong = 23; // OK: not shared
if (badShared == 0) // NOT OK: shared not sig_atomic_t
++badShared;
if (goodShared == 0) // OK: shared sig_atomic_t
++goodShared;
}
int main()
{
signal(SOMESIGNAL, handler);
badShared++; // NOT OK: shared not sig_atomic_t
goodShared++; // OK: shared sig_atomic_t
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果您想使用共享变量而不是sig_atomic_t使用原子 ( atomic_long_read, atomic_long_set)。
| 归档时间: |
|
| 查看次数: |
411 次 |
| 最近记录: |