你几乎是正确的。std::chrono::tzdb_list几乎没用!:-) 但是当你需要它的时候,你真的需要它。 很少有应用程序需要一次运行几个月,甚至几年。这些应用程序需要IANA提供的最新时区数据库。而且这些应用程序通常是高度多线程的。 想想航空公司的预订系统。 这样的应用程序可能有多个线程同时访问时区数据库,并且需要从时区数据库的一个版本升级到下一个版本,而无需停止和重新启动应用程序。 这就是std::chrono::tzdb_list可以保存这一天的地方。在某些操作系统上,函数std::chrono::reload_tzdb()会将一个新的数据库推到原子单链表std::chrono::tzdb_list的前面(如果存在较新的版本)。这允许应用程序以自己的速度从旧版本的时区数据库迁移到新版本,但它可以管理这一点。例如,应用程序可能有自己的原子标志和互斥系统来管理这种转换。 下面是一篇简短的文章,它准确地描述了应用程序如何定期检查新数据库的存在,并在发现时添加一个。这篇文章是为C20的开源先驱而写的,但应该很容易翻译成C20。 Here is the specification用于访问时区数据库的函数。
1条答案
按热度按时间zxlwwiss1#
你几乎是正确的。
std::chrono::tzdb_list
几乎没用!:-)但是当你需要它的时候,你真的需要它。
很少有应用程序需要一次运行几个月,甚至几年。这些应用程序需要IANA提供的最新时区数据库。而且这些应用程序通常是高度多线程的。
想想航空公司的预订系统。
这样的应用程序可能有多个线程同时访问时区数据库,并且需要从时区数据库的一个版本升级到下一个版本,而无需停止和重新启动应用程序。
这就是
std::chrono::tzdb_list
可以保存这一天的地方。在某些操作系统上,函数std::chrono::reload_tzdb()
会将一个新的数据库推到原子单链表std::chrono::tzdb_list
的前面(如果存在较新的版本)。这允许应用程序以自己的速度从旧版本的时区数据库迁移到新版本,但它可以管理这一点。例如,应用程序可能有自己的原子标志和互斥系统来管理这种转换。下面是一篇简短的文章,它准确地描述了应用程序如何定期检查新数据库的存在,并在发现时添加一个。这篇文章是为C20的开源先驱而写的,但应该很容易翻译成C20。
Here is the specification用于访问时区数据库的函数。