우리는 기존의 구성 요소에서 UTF-16 문자열을 가져옵니다 및 UTF-8 우리가 로그에 쓰기로 변환 우리의 로거에std :: wstring_convert의 멤버 함수는 안전합니까?
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
을 사용하고 있습니다. 컨버터는 우리가 할 수있는시, 각각의 변환에 인스턴스화됩니다
auto utf8string = converter.to_bytes(utf16string);
, 이것은 우리의 코드를 꽤 많이와 멀티 스레드 부분에서 이루어집니다 내가 컨버터의 재사용 하나 개의 인스턴스에 싶지만 "std::wstring_convert
이"상태 "를 노출한다는 것을 알고 있다면 나는 to_bytes
이 스레드 안전하지 않으며 동일한 인스턴스를 다시 사용하여 얻을 수있는 이득이 과도한 잠금에 의해 손실 될 것이라고 우려하고 있습니다. 인스턴스를 공유하십시오.).
따라서 std::wstring_convert<>::to_bytes
은 안전합니까?
편집 : 정말 부탁 해요 무엇인지에 대한 설명 : 2 개 이상의 스레드가 동시에 다른 인수와 함께 해당 인스턴스에 to_bytes
를 호출하는 경우, std::wstring_convert<>
의 인스턴스을 감안할 때, to_bytes
다음 잘 동작하도록 보장된다?
@LucDanton : 중요한 부분 ("const는 스레드 안전함"을 의미 함)의 2 줄 초록을 대답으로 채우고 나머지 부분에 대한 링크를 추가하는 것은 "허용"된 것 같습니다. 그러면 답을 수락 할 수 있습니다. –
위의 설명에 대한 설명 - "const는 스레드 안전을 의미합니다"는 "const는 스레드 안전을 의미하고 to_bytes는 const가 아니므로 인스턴스 상태가 변경 될 수 있음을 의미합니다" –
@LucDanton : duh! 주의 해 주셔서 고마워요. 물론 그것은 'to_bytes' (facepalm)입니다. –