实现线程安全的ctime函数

时间:2013-09-27 10:02:13

标签: c++ multithreading c++11 time

ANSI C时间函数不是线程安全的:特别是gmtimectimestrftime。据我所知,唯一的线程安全功能是time

如果我在Visual Studio中是正确的,那么这个函数都是线程安全的。我正在使用MinGW编译器(4.8.0和dwarf-2,Qt 5.1.0提供的那个)。

gmtime_rctime_rstrftime_r如何补充线程的安全功能?或者是否有一个更加线程安全的库?

我使用C ++ 11作为默认语言。

编辑1
我在windows xp上使用MinGW 4.8.0(posix,dwarf-2)。

编辑2
我正在考虑使用Boost.DateTime可能是一个不错的选择吗?

我对c ++ 11时间管理的缺乏感到非常失望!

2 个答案:

答案 0 :(得分:2)

gmtime_r实际上应该有ctime_rpthread.h,但由于某个错误(http://sourceforge.net/p/mingw/bugs/1625/),它们会被临时删除。

你几乎没有选择

  1. 等到它将被修复
  2. 使用旧版MiniGW
  3. 使用lock_guard制作所有这些功能的可重入包装,就像safe_increment已完成here
  4. 一样
  5. 也许最好的方法是使用由C ++ 11
  6. 添加的函数形式chrono头文件

答案 1 :(得分:0)

MinGW arleady同时提供gmtime_r和gmtime_s函数,但它们在std命名空间中注明。