线程安全的方式来转换时区之间的时间

时间:2011-06-06 20:16:44

标签: c++ c linux multithreading

我正在编写一个将utc-time转换为不同时区的应用程序,现在我可以使用这样的东西

putenv("TZ=TIMEZONE1"); 
tzset()
...
do time conversions

但我不认为它是线程安全的,所以是否有任何C / C ++库可以通过将timezone作为参数来进行时区转换而不是一些全局

2 个答案:

答案 0 :(得分:3)

您可能需要自己的代码/库来处理时区。标准库的处理非常落后,不适合处理比在程序生命周期内修复的单个时区更复杂的事情。

但是,一种可能的解决方案是分配共享内存fork,并更改子进程中的时区,然后通过共享内存将结果传回,以便在waitpid返回后读取父母。这虽然价格昂贵,但并不像听起来那么糟糕,因为fork在现代系统上很快。我的经验是,1 fork等于2-3 pthread_create次来电,1 pthread_create来电等于2-3 open次来电。由于更改时区需要打开一个或多个文件并对其执行IO,因此您可能不会将总时间成本增加3-5倍以上。如果你可以为你正在使用的每个时区保留一个子进程,那么它当然会更有效率。

答案 1 :(得分:2)

Boost.DateTime支持时区转换。