gpt4 book ai didi

c++ - std::wstring_convert 线程的成员函数是否安全?

转载 作者:IT老高 更新时间:2023-10-28 23:21:00 26 4
gpt4 key购买 nike

我们正在使用一个

std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;

在我们的记录器中,它从遗留组件获取 UTF-16 字符串并将其转换为我们写入日志的 UTF-8。转换器在每次转换时都会被实例化,我们这样做

auto utf8string = converter.to_bytes(utf16string);

这是在我们代码的一个非常密集和多线程的部分中完成的,我想重新使用转换器的一个实例,但是看到 std::wstring_convert暴露一个“状态”,我担心 to_bytes不是线程安全的,我们可以通过重用同一个实例获得的任何 yield 都将因随后需要的过度锁定而丢失(在这种情况下,我无论如何都不会共享该实例)。

所以,是 std::wstring_convert<>::to_bytes线程安全吗?

编辑:澄清我真正要问的:给定 std::wstring_convert<> 的一个实例, 如果 2 个或更多线程同时调用 to_bytes在具有不同参数的那个实例上,是 to_bytes然后保证表现良好?

最佳答案

因为 std::wstring_convert 是标准库的一部分,所以它遵循 certain rules在处理来自不同线程的此类对象时。

特别是,因为 to_bytesfrom_bytes 重载都是非 const,所以不可能在任何特定的来自不同线程的对象没有同步。这是有道理的,因为 codecvt 转换通常使用 state_type 对象。在不同步的情况下使用它会导致灾难。

关于c++ - std::wstring_convert 线程的成员函数是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16644257/

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