zoukankan      html  css  js  c++  java
  • localtime多线下不安全,localtime_r线程安全

    引用:http://blog.csdn.net/maocl1983/article/details/6221810

    localtime的英文解析:

    his structure is statically allocated and shared by the functions gmtime and localtime. Each time either one of these functions is called the content of this structure is overwritten.

    也就是说每次只能同时使用localtime()函数一次,要不就会被重写!

    The localtime() function need not be reentrant. A function that is not required to be reentrant is not required to be thread-safe.

    因此localtime()不是可重入的。同时libc里提供了一个可重入版的函数localtime_r();

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

    using namespace std;

    int main(int argc, char *argv[])
    {
    time_t tNow =time(NULL);
    time_t tEnd = tNow + 1800;
    //注意下面两行的区别
    struct tm* ptm = localtime(&tNow);
    struct tm* ptmEnd = localtime(&tEnd);

    char szTmp[50] = {0};
    strftime(szTmp,50,"%H:%M:%S",ptm);
    char szEnd[50] = {0};
    strftime(szEnd,50,"%H:%M:%S",ptmEnd);

    printf("%s /n",szTmp);
    printf("%s /n",szEnd);

    system("PAUSE");
    return EXIT_SUCCESS;
    }

    最后出来的结果是:

    21:18:39

    21:18:39

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

    using namespace std;

    int main(int argc, char *argv[])
    {
    time_t tNow =time(NULL);
    time_t tEnd = tNow + 1800;

    //在这里修改程序
    //struct tm* ptm = localtime(&tNow);
    //struct tm* ptmEnd = localtime(&tEnd);
    struct tm ptm = { 0 };
    struct tm ptmEnd = { 0 };
    localtime_r(&tNow, &ptm);
    localtime_r(&tEnd, &ptmEnd);

    char szTmp[50] = {0};
    strftime(szTmp,50,"%H:%M:%S",&ptm);
    char szEnd[50] = {0};
    strftime(szEnd,50,"%H:%M:%S",&ptmEnd);
    printf("%s /n",szTmp);
    printf("%s /n",szEnd);

    system("PAUSE");
    return EXIT_SUCCESS;
    }

    最后出来的结果是:

    10:29:06 
    10:59:06

     

    mysql_real_query也是非线程安全的

  • 相关阅读:
    第二阶段冲刺第五天(6月4号)
    第二阶段冲刺第四天(6月3号)
    第二次阶段冲刺第三天(6月2号)
    第二次阶段冲刺第二天(6月1号)
    第二次阶段冲刺第一天(5月31号)
    第十周学习进度
    第十一周学习进度
    第十二周学习进度
    javascript 将递归转化为循环
    创建数据库,并设置外部访问权限
  • 原文地址:https://www.cnblogs.com/linmzh/p/2832022.html
Copyright © 2011-2022 走看看