简短的问题
直到并包括 C++17,C++ 都没有提供线程安全的方法来获取当前时间或日期。这会在 C++20 中修复吗?
长问题
获取当前时间和日期的唯一可移植方法是使用 std::gmtime 或 std::localtime 函数。C 早期的残余,这些函数将自实现定义的纪元以来的给定时间转换为日历时间(例如,1515153600 转换为 2018 年 1 月 5 日星期五 12:00:00 GMT)。然而,唯一的缺点是这些函数返回一个指向内部静态变量的指针并且不是线程安全的。更糟糕的是,这个静态变量可能被所有相关函数共享,例如 std::gmtime、std::localtime 和 std::ctime,并且可能在每次调用这些函数时被覆盖。因此,如果您正在使用线程并希望定期检查您冒着数据竞争和未定义行为的风险的时间。
显然,当前的标准在这方面被打破了。C++ 标准委员会是否有任何努力来解决这种情况,这有多大可能包含在 C++20 中?