c库中的线程安全说明

时间:2015-01-23 15:08:17

标签: c multithreading thread-safety posix shared-libraries

如果以下代码是线程安全的话,有人可以向我澄清吗?

int get_time(uint64_t *time)
{
    struct timespec spec;
    if (!time)
        return -EFAULT;
    if (clock_gettime(CLOCK_REALTIME, &spec) == -1)
        return -errno;
    *time = //convert timespec into nanoseconds
    return SUCCESS;
}

这是一个可由多个线程调用的库中的API。 规范是一个局部变量,所以它不应该是一个问题。正确?我的疑问是关于clock_getime(POSIX.1-2001)和time参数的赋值。我想介绍一个互斥锁,但我不确定它是否是严格要求的。

1 个答案:

答案 0 :(得分:6)

你的代码中没有使用任何自动变量,唯一的函数调用(clock_gettime)本质上是线程安全的,所以答案是:

是的,这很安全。

From the POSIX spec

  

3.396线程安全

     

可由多个线程同时安全地调用的函数。除非另有明确说明,否则在IEEE Std 1003.1-2001的系统接口卷中定义的每个函数都是线程安全的。示例是任何“纯”函数,一个在访问静态存储时锁定互斥锁的函数,或者在线程之间共享的对象。

该功能的规格中没有列出任何例外:
http://pubs.opengroup.org/onlinepubs/009695399/functions/clock_getres.html