gpt4 book ai didi

c - 时间相关函数和多线程

转载 作者:太空宇宙 更新时间:2023-11-04 07:26:02 25 4
gpt4 key购买 nike

我在 Linux(带有 libc-2.12.so 的 CentOS 6.3 发行版)上工作。

我想知道C库函数time()localtime()mktime()是否可以在多线程环境下使用。

仅举个例子(不一定是我的项目代码):

#include <stdio.h>  
#include <time.h>

int main()
{

time_t timep;

struct tm *p;

for (int i = 0; i < 1000; ++i)
{
time(&timep);
printf("time() : %d \n", timep);
p = localtime(&timep);
timep = mktime(p);

printf("time()->localtime()->mktime():%d\n", timep);
}

return 0;
}

如果我用 OpenMP 包装上面的代码会怎样?也就是放在多线程环境下。

#include <stdio.h>  
#include <time.h>
#include <omp.h>

int main()
{

time_t timep;

struct tm *p;

#pragma omp parallel for
for (int i = 0; i < 1000; ++i)
{
time(&timep);
printf("time() : %d \n", timep);
p = localtime(&timep);
timep = mktime(p);

printf("time()->localtime()->mktime():%d\n", timep);
}

return 0;
}

最佳答案

来自 manual localtime :

The four functions asctime(), ctime(), gmtime() and localtime() return a pointer to static data and hence are not thread-safe. Thread-safe versions asctime_r(), ctime_r(), gmtime_r() and localtime_r() are specified by SUSv2, and available since libc 5.2.5.

关于c - 时间相关函数和多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18348383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com