Boost ptime在MinGW下不是线程安全的

Boost ptime under MinGW not thread safe

本文关键字:线程 安全 ptime MinGW Boost      更新时间:2023-10-16

我有一个boost库的问题。我正在使用MinGW与gcc 4.5.2编译以下代码:

unsigned long GetEpochSeconds()
{
    using namespace boost::posix_time;
    using namespace boost::gregorian;
    ptime now(second_clock::universal_time());
    ptime epoch(date(1970,1,1));
    time_duration diff = now-epoch;
    return diff.total_seconds();
}

问题是这个代码不是线程安全的。当我在多个线程中运行它时,我的应用程序崩溃了。现在我已经转换为c标准函数,如时间,mktime等,一切都很好,但在未来,我将需要一些boost时间函数。

我也在编译-D_REENTRANT,但这没有帮助。

谢谢你的建议

检查您的代码是否调用gmtime()或gmtime_r()(对此使用调试器)。请参阅http://www.boost.org/doc/libs/1_48_0/boost/date_time/c_time.hpp,并注意必须定义BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS,以便获得线程安全的时间。