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

Joh*_*ell 13 c++ multithreading stl

我们正在使用

std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
Run Code Online (Sandbox Code Playgroud)

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

auto utf8string = converter.to_bytes(utf16string);
Run Code Online (Sandbox Code Playgroud)

这是在我们代码的一个相当密集和多线程的部分完成的,我想重用一个转换器的实例,但是seing std::wstring_convert暴露了一个"状态",我担心这to_bytes不是线程安全的通过重用相同的实例可以获得的收益会因为需要过多的锁定而丢失(在这种情况下我不会共享实例).

那么,std::wstring_convert<>::to_bytes线程安全吗?

编辑:澄清我真正的问题:给定一个实例std::wstring_convert<>,如果2个或更多线程同时to_bytes使用不同的参数调用该实例,to_bytes那么保证表现良好吗?

Luc*_*ton 5

因为它std::wstring_convert是标准库的一部分,所以在不同线程中处理此类对象时,它遵循某些规则

特别是,由于to_bytesfrom_bytes重载都是非-的const,因此无法在不同步的情况下在来自不同线程的任何一个特定对象上使用那些成员。这是有道理的,因为编解码器转换通常使用state_type对象。不同步使用它会导致灾难。