为什么clock_gettime是异步信号安全的

时间:2018-07-21 06:48:07

标签: c multithreading

根据函数定义:

int clock_gettime(clockid_t clock_id, struct timespec * tp);

此函数需要timespec结构的指针。我想知道如果我们传递相同的全局变量struct timespec,为什么这个异步信号是安全的?例如,主程序在发生信号中断时调用clock_gettime,然后再次调用clock_gettime,它们都传递了全局timespec结构指针。他们互相干扰吗?

1 个答案:

答案 0 :(得分:4)

您所描述的内容不是异步信号安全。但是不安全的是您自己的代码,而不是函数本身。如果不是原子的,则在信号处理程序的内部和外部使用“全局”绝对是不安全的。只有一种类型可以保证是原子wrt信号处理程序:sig_atomic_t。别忘了也声明它volatile

clock_gettime() 异步信号安全,但这并不能防止您犯错。