私たちは、レガシー・コンポーネントからUTF-16文字列を取得し、我々はログに書き込むことをUTF-8に変換私たちのロガーでstd :: wstring_convertのメンバー関数は安全ですか?
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
を使用しています。コンバータは、私たちはその上に、各変換上でインスタンスを取得します
auto utf8string = converter.to_bytes(utf16string);
、これが我々のコードのかなりの集中とマルチスレッドの部分で行われ、私は、コンバータの再使用のインスタンスたいのですが、私はto_bytes
がスレッドセーフではなく、同じインスタンスを再利用することで得ることができる利益が、必要とされる過度のロックによって失われてしまうのではないかと心配しています(その場合、私はとにかくインスタンスを共有する)。
したがって、std::wstring_convert<>::to_bytes
はスレッドセーフですか?
EDIT:私は本当に求めているかについての明確化:2つの以上のスレッドが同時に異なる引数でそのインスタンス上のto_bytes
を呼び出す場合、std::wstring_convert<>
の1つのインスタンスを考えると、to_bytes
はその後、うまく動作することが保証されて?
@LucDanton:重要な部分の2行の要約(「constスレッドセーフ」を意味する)を答えとして残りの部分にリンクを追加することは「許可」されていると思います。 –
上記のコメントの明確化 - 「constはスレッドセーフを意味します」は「constはスレッドセーフを意味し、to_bytesはconstではなく、インスタンス状態を変更する可能性があります」 –
@LucDanton:duh!気づいてくれてありがとう - それを変更しました。もちろん、それは 'to_bytes'(facepalm)です。 –