UżywamyCzy funkcje składowe wątku std :: wstring_convert są bezpieczne?
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
w rejestratorze od naszego, że dostaje UTF-16 łańcuch ze składnika starszego i zamienia go na UTF-8, które piszemy do dziennika. Przetwornica zostanie instancja na każdej konwersji, na której robimy
auto utf8string = converter.to_bytes(utf16string);
Odbywa się to w dość intensywne i wielowątkowych część naszego kodu i chciałbym ponownie wykorzystać jedno wystąpienie konwertera, ale "Obawiam się, że std::wstring_convert
ujawnia" stan ", obawiam się, że to_bytes
nie jest bezpieczny dla wątków, a wszelkie zyski, które moglibyśmy uzyskać przez ponowne użycie tego samego wystąpienia, zostałyby utracone przez nadmierne blokowanie, które byłoby wtedy potrzebne (w takim przypadku nie byłoby udostępnić instancję mimo to).
Czy jest bezpieczny std::wstring_convert<>::to_bytes
wątek?
EDIT: wyjaśnienie o co mi naprawdę pytając: Biorąc pod uwagę jedno wystąpienie std::wstring_convert<>
, jeśli 2 lub więcej wątków jednocześnie wywołać to_bytes
na ten przykład z różnymi argumentami, jest to_bytes
gwarantowana następnie dobrze zachowywać?
@LucDanton: Myślę, że "wolno" napisać 2-liniowy abstrakt ważnej części ("const oznacza wątek bezpieczny") jako odpowiedź i dodać link do reszty - wtedy mogę zaakceptować twoją odpowiedź. –
Wyjaśnienie powyższego komentarza - "const oznacza wątek bezpieczny" należy zmienić na "const oznacza wątek bezpieczny i to_bytes nie jest const, co oznacza, że może zmienić stan wystąpienia" –
@LucDanton: duh! dzięki za uwagę - zmienił to. Oczywiście jest to 'to_bytes' (facepalm) –