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

标签 c multithreading

来自函数定义:

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

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

最佳答案

您所描述的将不是异步信号安全。但不安全的是你自己的代码,而不是函数本身。如果信号处理程序不是原子的,则在信号处理程序的内部和外部使用“全局”是永远不安全的。只有一种类型保证是原子 wrt 信号处理程序:sig_atomic_t。不要忘记也将其声明为 volatile

clock_gettime() 异步信号安全,但这并不能避免您自己犯错。

关于c - 为什么 clock_gettime 是异步信号安全的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51453570/

相关文章:

c - 将指针的地址分配给指针到指针

C-服务器 : Ncat: Connection reset by peer

c - 将数字拆分为数字,然后将它们显示在从 MSD 到 LSD 的列中

c - 关于使用 scanf 读取字符串

c++ - 生产者/消费者,如何确保在关闭所有消费者之前耗尽线程安全队列?

java - Condition 接口(interface)中的 signalAll 与对象中的 notifyAll

c++ - 反转字符串: Why is this crashing?

python - 使用多线程下载文件时内存不断增长

java - 多线程服务器

multithreading - 如何取消(不终止) boost 线程?