IWi*_*l80 1 c multithreading posix shared-libraries thread-safety
如果下面的代码是线程安全的,有人可以向我澄清一下吗?
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;
}
Run Code Online (Sandbox Code Playgroud)
这是一个可以由多个线程调用的库中的API.规范是一个局部变量,所以它不应该是一个问题.正确?我的疑问是关于clock_getime(POSIX.1-2001)和time参数的赋值.我想介绍一个互斥锁,但我不确定它是否是严格要求的.
你的代码中没有使用除自动变量之外的任何东西,唯一的函数call(clock_gettime)本质上是线程安全的,所以答案是:
是的,这很安全.
3.396线程安全
可由多个线程同时安全地调用的函数.除非另有明确说明,否则 IEEE Std 1003.1-2001的系统接口卷中定义的每个功能都是线程安全的.示例是任何"纯"函数,一种在访问静态存储时锁定互斥锁的函数,或者在线程之间共享的对象.
该功能的规范中没有列出任何例外:http:
//pubs.opengroup.org/onlinepubs/009695399/functions/clock_getres.html