Fehler: _wsetlocale ist nicht Threadsafe

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

304497
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Problembeschreibung
Heap-Beschädigung kann auftreten, wenn _wsetlocale von mehreren Threads gleichzeitig aufgerufen wird.
Ursache
_wsetlocale synchronisiert den Zugriff auf lokale statische Variable Outwlocale nicht.
Lösung
Dieses Problem umgehen, müssen Sie Aufrufe von _wsetlocale synchronisieren.
Status
Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel Microsoft-Produkten handelt.
Weitere Informationen
Der C Runtime Gebietsschema Mechanismus in Microsoft Visual C++ unterscheidet sich von der Gebietsschema-Mechanismus in Microsoft Windows. Obwohl Windows pro Thread Gebietsschemas unterstützt, unterstützt C-Laufzeit nur ein globales Gebietsschema für jedes Programm.

Wenn mehrere Threads _wsetlocale aufrufen, kann keine Threadgebietsschema vertrauenswürdig sein. Verwendet beispielsweise wenn ein Thread ruft _wsetlocale für Französisch und versucht, das Gebietsschema für _wcslwr zu verwenden und ein anderer Thread _wsetlocale für Englisch, ruft bevor der erste Thread den Funktionsaufruf _wcslwr ausgeführt wird, dann der erste Thread das englische Gebietsschema anstelle des Gebietsschemas Französisch.

Schritte zum Reproduzieren des Verhaltens

#define _UNICODE#include <stdio.h>#include <locale.h>#include <process.h>void __cdecl test(void *i) {	_wsetlocale(LC_ALL, L"English");	_wsetlocale(LC_ALL, L"French");	_wsetlocale(LC_ALL, L"German");	_wsetlocale(LC_ALL, L"English");	printf("%d exit\n",i);}void wmain () {	for (int i=0; i<30; ++i) _beginthread(test,0,(void*)i);	getchar();}				

Warnung: Dieser Artikel wurde automatisch übersetzt

Eigenschaften

Artikelnummer: 304497 – Letzte Überarbeitung: 01/06/2015 06:54:22 – Revision: 1.0

  • Microsoft Visual C++ 6.0 Service Pack 5
  • kbnosurvey kbarchive kbmt kbbug kbfix KB304497 KbMtde
Feedback