【问题标题】:why clock_gettime is async signal safe为什么clock_gettime是异步信号安全的
【发布时间】:2018-07-22 16:12:14
【问题描述】:

从函数定义来看:

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

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

【问题讨论】:

    标签: c multithreading


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 2019-12-14
      • 2020-07-16
      相关资源
      最近更新 更多