在编写ATS插件的过程中,发现使用mktime会偶尔出现段错误, 经过网上调研,发现mktime等函数不是线程安全的, 于是编写下面的代码进行测试.

注意加锁和不加锁区别很大, 在mktime中使用多线程, 加上互斥锁就没有问题.

//gcc -g mktime_multithread.c -o mktime_multithread -lpthread -std=c99
//
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <pthread.h>pthread_mutex_t mutex;void* test_setenv(void *arg)
{char ac_name[1024] = {};for (int i = 0; i < 10000; i++){snprintf(ac_name, sizeof(ac_name), "stra_1_fe_filter_dt_other_hadoop_arg_%d", i);printf("setenv %s\n",ac_name);pthread_mutex_lock(&mutex);setenv(ac_name," 1500",0);pthread_mutex_unlock(&mutex);}return NULL;
}void* test_mktime(void* arg){for (int i = 0; i < 10000; i++){/*测试非法日期会不会导致程序异常*/struct tm st_tm;memset(&st_tm,0,sizeof(st_tm));strptime("201506270828001","%Y%m%d%H%M",&st_tm);pthread_mutex_lock(&mutex);time_t st_time = mktime(&st_tm);pthread_mutex_unlock(&mutex);printf("time_t=%lu\n",st_time);}return NULL;
}int main(int argc, char* argv[])
{pthread_mutex_init(&mutex,NULL);pthread_t pt[2] = {0};pthread_create(&pt[0], NULL, test_setenv, NULL);pthread_create(&pt[1], NULL, test_mktime, NULL);pthread_join(pt[0], NULL);pthread_join(pt[1], NULL);pthread_mutex_destroy(&mutex);return 0;
}

参考文献

[1].http://www.xuebuyuan.com/1824402.html

多线程中使用mktime和setenv函数相关推荐

  1. sleep 函数 linux 线程吗,sleep函数在多线程中的作用

    1.前言 多线程中经常会使用sleep()函数,我们知道cpu对于多线程的操作是采用时间片轮询的方式,即,时间片1操作线程A,时间片1结束后,时间片2操作线程B,时间片2结束后,时间片3操作线程A,依 ...

  2. Qt 多线程中地信号与槽

    Qt 多线程中地信号与槽 函数原型: 1 QObject::connect(const QObject *sender, const char *signal, const QObject *rece ...

  3. Linux 多线程应用中编写安全的信号处理函数

    2019独角兽企业重金招聘Python工程师标准>>> Linux 多线程应用中编写安全的信号处理函数 在 开发多线程应用时,开发人员一般都会考虑线程安全,会使用 pthread_m ...

  4. python中run函数作用_python3多线程中如何改写run()函数?

    我们对于函数的使用一般是直接根据其作用进行举例讲解,最近偶然的一次多线程的代码练习中,让小编发现在构建多线程的时候,我们也可以对函数进行重写.小编马上进行了这个函数内容的整理,为了让大家能理解前后的内 ...

  5. c++CreateEvent函数在多线程中使用及实例

    CreateEvent函数详解参见本博客文章: c++中CreateEvent函数解析(2) HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttr ...

  6. 【Linux】多线程中使用fork()

    (最核心的东西我在下面用红色字体标出来了,理解了那块,这些东西都是就理解了!) 在本篇文章开始之前,需要大家先了解线程和进程,这位大哥讲的言简意赅:进程和线程的主要区别(总结)_kuangsongha ...

  7. Linux中的可重入函数和不可重入函数

    可重入函数 可重入函数(即可以被中断的函数)可以被一个以上的任务调用,而不担心数据破坏.可重入函数在任何时候都可以被中断,而一段时间之后又可以恢复运行,而相应的数据不会破坏或者丢失. 可重入函数使用的 ...

  8. android串口补位,Rust多线程中的消息传递机制

    代码说话. use std::thread; use std::sync::mpsc; use std::time::Duration; fn main() { let (tx, rx) = mpsc ...

  9. C#多线程中lock的用法

    最近在看些c#的代码,发现很多是以前没有接触到了,只能上网查,把比较好的整理下来. 经常碰到同时需要对某个数据进行操作,或者对某个文件进行读写操作,对于这些操作我们以前往往不能很好的进行处理,自从C# ...

最新文章

  1. 超详干货!Linux 环境变量配置全攻略
  2. [LeetCode]--290. Word Pattern
  3. Android Binder的使用
  4. SAP歷史更改記錄函數
  5. 在Asp.Net Core中使用ModelConvention实现全局过滤器隔离
  6. 鸿蒙济判法讲义,2020-02-09《薛兆丰经济学讲义》读书笔记
  7. 美的集团:收购KUKA总价款为15亿欧元
  8. 苹果宣布取消AirPower 因技术难题无法攻克
  9. 使用memcachedclientXmemcached与Spring整合
  10. MyBatis学习(七)
  11. 免费且高质量的知识有的是,你只是不知道怎么找到它们!
  12. HCIE Security 2020.12.04面试战报
  13. 【渝粤教育】电大中专品牌管理与推广 (2)_1作业 题库
  14. 北向接口jms消息服务器,运行日志 - eSight V300R010C00SPC600 维护指南 18 - 华为
  15. webmax函数高级教程整理集
  16. mongodb-b站黑马程序员
  17. html 隐藏广告代码,Javascript实现关闭广告实现删除广告的效果
  18. 政务区块链平台设计思路
  19. MySQL优化之执行计划
  20. java清空购物车方法_Javaweb网上商城项目实战(21)删除和清空购物车

热门文章

  1. gdoi2017总结
  2. python基础:python扩展包的安装方式
  3. 函数指针amp;绑定: boost::functoin/std::function/bind
  4. 2.4.4.1、Django新建APP(acounts)
  5. 敏捷宣言遵循的十二条原则
  6. 《OpenCV3编程入门》学习笔记7 图像变换(一)基于OpenCV的边缘检测
  7. ORB_SLAM2代码阅读(5)——Bundle Adjustment
  8. mysql数据库比对视频教程_MySQL数据库全学习实战视频教程(27讲 )
  9. oracle怎么adi导入,Web adi 导入笔记 详细图解
  10. java 构建是什么意思_构建的概念