在信号处理程序中使用长数据。

如何在信号处理程序中设置longtypes的variables(在64位机器上= 8字节)? 我读过,你只能使用sig_atomic_ttypes的sig_atomic_t ,它实际上是在信号处理程序中作为volatile int实现的,修改大于int数据types是不安全的。

Solutions Collecting From Web of "在信号处理程序中使用长数据。"

实际上,你可以在信号处理程序里面使用一个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; } 

如果要使用sig_atomic_t以外的共享变量, sig_atomic_t使用atomics( atomic_long_readatomic_long_set )。