在MinGW下提升ptime不是线程安全的

kap*_*ppa 6 c++ boost mingw

我有升级库的问题.我正在使用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();
}
Run Code Online (Sandbox Code Playgroud)

问题是这段代码不是线程安全的.当我从多个线程中运行它时,我的应用程序崩溃了.现在我已经转换为c-standard函数,如time,mktime等,一切正常,但将来我需要一些提升时间函数.

我也用-D_REENTRANT编译,但这没有用.

谢谢你的任何建议.

Joh*_*nck 2

检查您的代码是否调用 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 才能使时间成为线程安全的。