Sind Mitgliederfunktionen von std :: wstring_convert thread sicher?

9

Wir verwenden ein

%Vor%

in einem Logger von uns, der eine UTF-16-Zeichenfolge von einer Legacy-Komponente erhält und sie in UTF-8 konvertiert, die wir in das Protokoll schreiben. Der Konverter wird bei jeder Konvertierung instanziiert, was wir tun

%Vor%

Dies geschieht in einem ziemlich intensiven und multi-threaded Teil unseres Codes und ich möchte eine Instanz des Konverters wiederverwenden, aber wenn ich sehe, dass std::wstring_convert einen "Zustand" freilegt, mache ich mir Sorgen to_bytes ist nicht threadsicher und alle Gewinne, die wir durch die Wiederverwendung der gleichen Instanz erzielen könnten, würden durch die exzessive Sperrung verloren gehen, die dann benötigt würde (in diesem Fall würde ich die Instanz sowieso nicht teilen).

Also, ist std::wstring_convert<>::to_bytes threadsicher?

BEARBEITEN: Eine Klarstellung dessen, was ich wirklich frage: Wenn eine Instanz von std::wstring_convert<> aufgerufen wird, wenn 2 oder mehr Threads gleichzeitig to_bytes für diese Instanz mit unterschiedlichen Argumenten aufrufen, ist to_bytes garantiert dann gut?

    
Johann Gerell 20.05.2013, 07:02
quelle

1 Antwort

1

Da std::wstring_convert Teil der Standardbibliothek ist, folgt bestimmte Regeln , wenn es darum geht, ein Objekt dieses Typs aus verschiedenen Threads zu behandeln.

Da sowohl to_bytes als auch from_bytes overloads nicht const sind, ist es insbesondere nicht möglich, diese Elemente für ein bestimmtes Objekt aus verschiedenen Threads ohne Synchronisierung zu verwenden. Dies ist sinnvoll, da Codecvt-Konvertierungen typischerweise ein state_type -Objekt verwenden. Die Verwendung ohne Synchronisierung würde zu einem Desaster führen.

    
Luc Danton 26.09.2014, 09:04
quelle

Tags und Links