c 库中的线程安全说明
Thread safety clarification in a c library
有人可以向我解释一下以下代码是否是线程安全的吗?
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,可以被多个线程调用。
spec 是一个局部变量,所以它应该不是问题。正确的?我的疑问是关于 clock_getime (POSIX.1-2001) 和时间参数的分配。我想介绍一个互斥量,但我不确定它是否是严格要求的。
您在代码中除了使用自动变量外没有使用任何东西,并且唯一的函数调用 (clock_gettime
) 本质上是线程安全的,所以答案是:
是的,很安全。
3.396 Thread-Safe
A function that may be safely invoked concurrently by multiple threads. Each function defined in the System Interfaces volume of IEEE Std 1003.1-2001 is thread-safe unless explicitly stated otherwise. Examples are any "pure" function, a function which holds a mutex locked while it is accessing static storage, or objects shared among threads.
该函数的规范中没有列出例外情况:
http://pubs.opengroup.org/onlinepubs/009695399/functions/clock_getres.html
有人可以向我解释一下以下代码是否是线程安全的吗?
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,可以被多个线程调用。 spec 是一个局部变量,所以它应该不是问题。正确的?我的疑问是关于 clock_getime (POSIX.1-2001) 和时间参数的分配。我想介绍一个互斥量,但我不确定它是否是严格要求的。
您在代码中除了使用自动变量外没有使用任何东西,并且唯一的函数调用 (clock_gettime
) 本质上是线程安全的,所以答案是:
是的,很安全。
3.396 Thread-Safe
A function that may be safely invoked concurrently by multiple threads. Each function defined in the System Interfaces volume of IEEE Std 1003.1-2001 is thread-safe unless explicitly stated otherwise. Examples are any "pure" function, a function which holds a mutex locked while it is accessing static storage, or objects shared among threads.
该函数的规范中没有列出例外情况:
http://pubs.opengroup.org/onlinepubs/009695399/functions/clock_getres.html