免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3070 | 回复: 6
打印 上一主题 下一主题

浅谈time [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-08 12:10 |只看该作者 |倒序浏览
刚看到一贴,讨论时间函数多线程访问安全问题。小弟也发上一贴,讨论下最近一个项目中使用时间函数碰到的问题。

1.由于在程序中需要使用time函数获取当前时间戳,在多个线程中调用的话,发现有时time(NULL)返回值为0,或者返回一个不正常的时间值。
2.在多线程中调用localtime,strftime函数格式化时间,长时间运行,没有问题。localtime在多线程下使用应该是安全的。


没有找到time_t time(time_t* __time_t) 的实现,这个函数在多线程中应该不是安全的,需要的话请采用

//加锁
time_t tt = time(NULL);

论坛徽章:
0
2 [报告]
发表于 2010-08-10 10:05 |只看该作者
本帖最后由 davelv 于 2010-08-10 10:11 编辑

在我这里多线程time()函数没有出现什么问题。楼主不如把自己测试源码贴出来让大家看看
以下是glibc2.12的time()实现

  1. /* Return the time now, and store it in *TIMER if not NULL.  */
  2. time_t
  3. time (timer)
  4.      time_t *timer;
  5. {
  6.   __set_errno (ENOSYS);

  7.   if (timer != NULL)
  8.     *timer = (time_t) -1;
  9.   return (time_t) -1;
  10. }
复制代码
ctime 不是线程安全的,所以有ctime_r作为替代。

  1. /* Return a string as returned by asctime which
  2.    is the representation of *T in that form.  */
  3. char *
  4. ctime (const time_t *t)
  5. {
  6.   /* The C Standard says ctime (t) is equivalent to asctime (localtime (t)).
  7.      In particular, ctime and asctime must yield the same pointer.  */
  8.   return asctime (localtime (t));
  9. }
复制代码

  1. /* Return a string as returned by asctime which is the representation
  2.    of *T in that form.  Reentrant version.  */
  3. char *
  4. ctime_r (const time_t *t, char *buf)
  5. {
  6.   struct tm tm;
  7.   return __asctime_r (__localtime_r (t, &tm), buf);
  8. }
复制代码

论坛徽章:
154
2022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:5720周年集字徽章-年
日期:2022-10-26 16:44:2015-16赛季CBA联赛之深圳
日期:2022-11-02 14:02:4515-16赛季CBA联赛之八一
日期:2022-11-28 12:07:4820周年集字徽章-20	
日期:2023-07-19 08:49:4515-16赛季CBA联赛之八一
日期:2023-11-04 19:23:5115-16赛季CBA联赛之广夏
日期:2023-12-13 18:09:34
3 [报告]
发表于 2010-08-10 10:33 |只看该作者
1.由于在程序中需要使用time函数获取当前时间戳,在多个线程中调用的话,发现有时time(NULL)返回值为0,或者返回一个不正常的时间值。


这个应该不会吧?

论坛徽章:
0
4 [报告]
发表于 2010-08-10 16:24 |只看该作者
1.由于在程序中需要使用time函数获取当前时间戳,在多个线程中调用的话,发现有时time(NULL)返回值为0,或者返回一个不正常的时间值。

这个是绝对不会的

论坛徽章:
13
巨蟹座
日期:2013-10-30 18:29:4115-16赛季CBA联赛之青岛
日期:2019-01-04 17:30:1015-16赛季CBA联赛之天津
日期:2016-03-08 10:30:1715-16赛季CBA联赛之天津
日期:2015-12-10 15:56:452015年亚洲杯之约旦
日期:2015-03-09 16:29:36双鱼座
日期:2014-11-27 17:17:20寅虎
日期:2014-11-18 13:55:12双子座
日期:2014-03-31 15:41:32狮子座
日期:2014-03-14 11:23:24狮子座
日期:2014-02-19 16:30:12午马
日期:2013-11-04 23:22:31卯兔
日期:2013-10-30 19:51:15
5 [报告]
发表于 2011-01-30 09:47 |只看该作者
不是很懂,还是up up up up again up!

论坛徽章:
0
6 [报告]
发表于 2011-01-30 10:21 |只看该作者
time会返回NULL{:3_191:}

论坛徽章:
0
7 [报告]
发表于 2011-01-30 14:41 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP