关于localtime()函数在多线程中的core问题
来源:互联网 发布:linux hadoop 下载 编辑:程序博客网 时间:2024/06/06 07:29
生产上的程序在某天运行的过程中忽然core掉,gdb显示的core文件的堆栈信息如下:
(gdb) where
#0 0x0000003369832925 in raise () from /lib64/libc.so.6
#1 0x0000003369834105 in abort () from /lib64/libc.so.6
#2 0x0000003369870837 in __libc_message () from /lib64/libc.so.6
#3 0x0000003369876166 in malloc_printerr () from /lib64/libc.so.6
#4 0x000000336989dbe9 in tzset_internal () from /lib64/libc.so.6
#5 0x000000336989dd69 in __tz_convert () from /lib64/libc.so.6
#6 0x00000000004058a0 in getCurrDateTime (sCurrDateTime=0x2ab81c3f4930 "`\f@\034\270*") at StaticPub.cpp:27
#7 0x0000000000412716 in InitOrderInfo::InitServStateStr (this=0x2ab83c6a8010, nUserType=1, lServId=210001950603,
pstServStatAttr=0x2ab83c6ce150, nServStatAttrSize=1, pServStateStr=0x2ab83c778db8 "") at InitOrderInfo.cpp:1929
#8 0x0000000000411424 in InitOrderInfo::InitServBaseInfo (this=0x2ab83c6a8010) at InitOrderInfo.cpp:1536
#9 0x000000000040f5b9 in InitOrderInfo::process (this=0x2ab83c6a8010) at InitOrderInfo.cpp:655
#10 0x0000000000425156 in SI_WorkFlow::executor (this=0x2ab82c0008c0, pUser=0x2ab82dd31690) at WorkFlow.cpp:782
#11 0x0000000000408df4 in SI_ThreadFlow::run (this=0x33ea3f0) at SI_ThreadFlow.cpp:187
#12 0x00000000004086a5 in OpenThreads::DC_ThreadPrivateActions::StartThread (data=0x33ea3f0) at Thread.cpp:120
#13 0x000000336a0079d1 in start_thread () from /lib64/libpthread.so.0
#14 0x00000033698e8b6d in clone () from /lib64/libc.so.6
在StaticPub.cpp文件发现是core附近的代码为:
time_t tTime;
struct tm *localTime;
time(&tTime);
localTime=localtime(&tTime);
感到很不理解,在获取系统函数的时候程序竟然会core掉,后来在上网查阅之后发现,原来local_time()函数不是线程安全类型,函数在返回的时候返回的是一个指针,实际内存是localtime内部通过static申请的静态内存,所以在不加锁的情况下两个线程同时调用的时候就会出错.
在linux下有local_time_r()函数是线程安全的,把代码改成如下:
time_t tTime(NULL);
struct tm localTime={0};
time(&tTime);
localetime_r(&tTime,&localTime);;
- 关于localtime()函数在多线程中的core问题
- localtime函数在vc++2005中的使用问题
- Perl 中的localtime函数
- 关于时间函数localtime()返回值的注意问题
- 关于多线程中的可重入函数问题
- 关于多线程中的可重入函数问题
- 静态函数在多线程服务器中的问题
- linux 关于线程不安全函数localtime小记
- localtime函数中的返回指针的思考
- linux 中的gmtime和localtime函数
- 关于PostMessage在多线程中的内存释放问题
- 由localtime引发的函数可重入问题
- localtime()函数的使用问题
- 由localtime引发的函数可重入问题
- 由localtime引发的函数可重入问题
- localtime ()函数
- localtime函数
- localtime 问题
- 关于Integer大小比较的问题
- palette调色板初级使用
- 链表的学习 day1
- 继承、封装、多态
- 03-S3C2440u-boot学习之u-boot分析之u-boot命令实现
- 关于localtime()函数在多线程中的core问题
- C实例---文件操作(打开文件)
- JAVA jsoup 架包安装
- 后缀数组模板
- 对象继承训练(2):继承后可以调用父类方法
- .Net程序员学用Oracle系列(11):系统函数(下)
- POJ1182【种类并查集】
- 《程序员自我修养》--动态链接
- 在win7上安装ft232r usb uart 驱动