如何解决在时区之间转换时间的线程安全方法
| 我正在编写一个将utc-time转换为不同时区的应用程序,现在我可以使用类似的东西putenv(\"TZ=TIMEZONE1\");
tzset()
...
do time conversions
但是我不认为它是线程安全的,所以有没有哪个C / C ++库可以通过将时区作为函数的参数而不是全局变量来进行时区转换
解决方法
Boost.DateTime支持时区转换。
, 您可能需要自己的能够处理时区的代码/库。标准库的处理非常落后,不适合处理比程序生存期内固定的单个时区更复杂的事情。
但是,一种可能的解决方案是分配共享内存
fork
,并在子进程中更改时区,然后将结果通过共享内存传回,以便在waitpid
返回父级后读取。这价格适中,但听起来并不差,因为在现代系统上ѭ1很快。我的经验是,1fork
等于2-3pthread_create
通话,1pthread_create
等于2-3open
通话。由于更改时区将需要打开一个或多个文件并对它们执行IO,因此您可能不会将总时间成本增加超过3-5倍。如果您可以在所使用的每个时区都保留一个子进程,那么它可能会更有效率。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。