/Zc: threadsafeinit (Thread sichere lokale statische Initialisierung)/Zc:threadSafeInit (Thread-safe Local Static Initialization)

Die /Zc: threadsafeinit -Compileroption weist den Compiler an, statische lokale Variablen (Funktions Gültigkeitsbereich) auf Thread sichere Weise zu initialisieren, sodass keine manuelle Synchronisierung erforderlich ist.The /Zc:threadSafeInit compiler option tells the compiler to initialize static local (function scope) variables in a thread-safe way, eliminating the need for manual synchronization. Nur die Initialisierung ist Thread sicher.Only initialization is thread-safe. Die Verwendung und Änderung von statischen lokalen Variablen durch mehrere Threads muss weiterhin manuell synchronisiert werden.Use and modification of static local variables by multiple threads must still be manually synchronized. Diese Option ist ab Visual Studio 2015 verfügbar.This option is available starting in Visual Studio 2015. Diese Option wird von Visual Studio standardmäßig aktiviert.By default, Visual Studio enables this option.

SyntaxSyntax

/Zc: threadsafeingeit[ - ]/Zc:threadSafeInit[-]

BemerkungenRemarks

Im c++ 11-Standard müssen Block Bereichs Variablen mit statischer oder Thread Speicherdauer mit 0 (null) initialisiert werden, bevor eine andere Initialisierung stattfindet.In the C++11 standard, block scope variables with static or thread storage duration must be zero-initialized before any other initialization takes place. Die Initialisierung tritt auf, wenn das Steuerelement zuerst die Deklaration der Variablen durchläuft.Initialization occurs when control first passes through the declaration of the variable. Wenn während der Initialisierung eine Ausnahme ausgelöst wird, wird die Variable als nicht initialisiert betrachtet, und die Initialisierung wird erneut versucht, wenn die Steuerung das nächste Mal die Deklaration durchläuft.If an exception is thrown during initialization, the variable is considered uninitialized, and initialization is re-attempted the next time control passes through the declaration. Wenn die Steuerung gleichzeitig mit der Initialisierung in die Deklaration eintritt, werden die gleichzeitigen Ausführungs Blöcke während der Initialisierung abgeschlossen.If control enters the declaration concurrently with initialization, the concurrent execution blocks while initialization is completed. Das Verhalten ist nicht definiert, wenn das Steuerelement die Deklaration während der Initialisierung rekursiv wieder eingibt.The behavior is undefined if control re-enters the declaration recursively during initialization. Standardmäßig implementiert Visual Studio ab Visual Studio 2015 dieses Standardverhalten.By default, Visual Studio starting in Visual Studio 2015 implements this standard behavior. Dieses Verhalten kann explizit durch Festlegen der /Zc: threadsafeinit -Compileroption angegeben werden.This behavior may be explicitly specified by setting the /Zc:threadSafeInit compiler option.

Die /Zc: threadsafdeit -Compileroption ist standardmäßig aktiviert.The /Zc:threadSafeInit compiler option is on by default. Die /permissive- -Option hat keine Auswirkung auf /Zc: threadsafeingeit.The /permissive- option does not affect /Zc:threadSafeInit.

Die Thread sichere Initialisierung statischer lokaler Variablen basiert auf Code, der in der universellen C-Lauf Zeit Bibliothek (ucrt) implementiert ist.Thread-safe initialization of static local variables relies on code implemented in the Universal C run-time library (UCRT). Um zu vermeiden, dass eine Abhängigkeit von der ucrt besteht, oder wenn Sie das nicht Thread sichere Initialisierungs Verhalten von Versionen von Visual Studio vor Visual Studio 2015 beibehalten möchten, verwenden Sie die Option /Zc: threadsafeinit- .To avoid taking a dependency on the UCRT, or to preserve the non-thread-safe initialization behavior of versions of Visual Studio prior to Visual Studio 2015, use the /Zc:threadSafeInit- option. Wenn Sie wissen, dass keine Thread Sicherheit erforderlich ist, verwenden Sie diese Option, um etwas geringeren und schnelleren Code um statische lokale Deklarationen zu generieren.If you know that thread-safety is not required, use this option to generate slightly smaller, faster code around static local declarations.

Thread sichere statische lokale Variablen verwenden intern Thread-Local Storage (TLS), um eine effiziente Ausführung zu ermöglichen, wenn die statische bereits initialisiert wurde.Thread-safe static local variables use thread-local storage (TLS) internally to provide efficient execution when the static has already been initialized. Die Implementierung dieses Features basiert auf den Windows-Betriebssystem-Unterstützungsfunktionen in Windows Vista und höheren Betriebssystemen.The implementation of this feature relies on Windows operating system support functions in Windows Vista and later operating systems. Für Windows XP, Windows Server 2003 und ältere Betriebssysteme gibt es keine Unterstützung, sodass Sie den Effizienzvorteil nicht erhalten.Windows XP, Windows Server 2003, and older operating systems do not have this support, so they do not get the efficiency advantage. Diese Betriebssysteme verfügen auch über eine niedrigere Grenze für die Anzahl der zu ladenden TLS-Abschnitte.These operating systems also have a lower limit on the number of TLS sections that can be loaded. Das Überschreiten des TLS-Abschnitts Limits kann zu einem Absturz führen.Exceeding the TLS section limit can cause a crash. Wenn dies ein Problem im Code ist, insbesondere in Code, der auf älteren Betriebssystemen ausgeführt werden muss, verwenden Sie/Zc: threadsafeinit- , um den Thread sicheren Initialisierungs Code zu deaktivieren.If this is a problem in your code, especially in code that must run on older operating systems, use /Zc:threadSafeInit- to disable the thread-safe initialization code.

Weitere Informationen über Konformitätsprobleme in Visual C++ finden Sie unter Nonstandard Behavior.For more information about conformance issues in Visual C++, see Nonstandard Behavior.

So legen Sie diese Compileroption in der Visual Studio-Entwicklungsumgebung festTo set this compiler option in the Visual Studio development environment

  1. Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts.Open the project's Property Pages dialog box. Weitere Informationen erhalten Sie unter Set C++ compiler and build properties in Visual Studio (Festlegen der Compiler- und Buildeigenschaften (C++) in Visual Studio).For details, see Set C++ compiler and build properties in Visual Studio.

  2. Wählen Sie im Dropdown Menü Konfigurationen die Option alle Konfigurationen aus.From the Configurations drop down menu, choose All Configurations.

  3. Wählen Sie die Eigenschaften Seite Konfigurations Eigenschaften > C/C++- > Befehlszeile aus.Select the Configuration Properties > C/C++ > Command Line property page.

  4. Ändern Sie die Eigenschaft zusätzliche Optionen , um /Zc: threadsafeinit oder /Zc: threadsafeinit einzuschließen, und wählen Sie dann OK aus.Modify the Additional Options property to include /Zc:threadSafeInit or /Zc:threadSafeInit- and then choose OK.

Siehe auchSee also

MSVC-CompileroptionenMSVC Compiler Options
MSVC-CompilerCommand-Line SyntaxMSVC Compiler Command-Line Syntax
/Zc (Übereinstimmung)/Zc (Conformance)