gpt4 book ai didi

c++ - setlocale 和多线程的未定义行为?

转载 作者:行者123 更新时间:2023-11-28 05:22:45 31 4
gpt4 key购买 nike

<分区>

CppRef states 2016-12-13 09:00 UTC:

Because setlocale modifies global state which affects execution of locale-dependent functions, it is undefined behavior to call it from one thread, while another thread is executing any of the following functions: std::fprintf, std::isprint, std::iswdigit,
std::localeconv, std::tolower, std::fscanf, std::ispunct,
std::iswgraph, std::mblen, std::toupper, std::isalnum, std::isspace,
std::iswlower, std::mbstowcs, std::towlower, std::isalpha,
std::isupper, std::iswprint, std::mbtowc, std::towupper, std::isblank,
std::iswalnum, std::iswpunct, std::setlocale, std::wcscoll,
std::iscntrl, std::iswalpha, std::iswspace, std::strcoll, std::wcstod,
std::isdigit, std::iswblank, std::iswupper, std::strerror,
std::wcstombs, std::isgraph, std::iswcntrl, std::iswxdigit,
std::strtod, std::wcsxfrm, std::islower, std::iswctype,
std::isxdigit
.

这个信息似乎......至少令人惊讶。

我知道它会影响全局状态,我对此没有意见(否则我会使用不同的方法来更改语言环境)。

尽管我一直假设(并且我认为 VC++ 至少以这种方式实现)setlocale 与使用语言环境的函数相比是线程安全的。

较新的 C++ 标准(和 C?)(实际上完全包含线程)对此有任何说明吗?

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com