/Zc:threadSafeInit (inizializzazione statica locale thread/safe)
L'opzione del compilatore /Zc:threadSafeInit indica al compilatore di inizializzare variabili locali statiche (ambito funzione) in modo thread-safe, eliminando la necessità di sincronizzazione manuale. Solo l'inizializzazione è thread-safe. L'uso e la modifica delle variabili locali statiche da più thread devono comunque essere sincronizzati manualmente. Questa opzione è disponibile a partire da Visual Studio 2015. Per impostazione predefinita, Visual Studio abilita questa opzione.
Sintassi
/Zc:threadSafeInit[-]
Osservazioni:
Nello standard C++11, le variabili di ambito di blocco con durata di archiviazione statica o thread devono essere inizializzate zero prima che venga eseguita qualsiasi altra inizializzazione. L'inizializzazione si verifica quando il controllo passa per la prima volta attraverso la dichiarazione della variabile. Se viene generata un'eccezione durante l'inizializzazione, la variabile viene considerata non inizializzata e l'inizializzazione viene tentata nuovamente la volta successiva che il controllo passa attraverso la dichiarazione. Se il controllo immette la dichiarazione contemporaneamente all'inizializzazione, i blocchi di esecuzione simultanei durante l'inizializzazione vengono completati. Il comportamento non è definito se il controllo immette nuovamente la dichiarazione in modo ricorsivo durante l'inizializzazione. Per impostazione predefinita, Visual Studio a partire da Visual Studio 2015 implementa questo comportamento standard. Questo comportamento può essere specificato in modo esplicito impostando l'opzione del compilatore /Zc:threadSafeInit .
L'opzione del compilatore /Zc:threadSafeInit è attivata per impostazione predefinita. L'opzione /permissive- non influisce su /Zc:threadSafeInit.
L'inizializzazione thread-safe delle variabili locali statiche si basa sul codice implementato nella libreria di runtime UWP (Universal C). Per evitare di accettare una dipendenza da UCRT o per mantenere il comportamento di inizializzazione non thread-safe delle versioni di Visual Studio precedenti a Visual Studio 2015, usare l'opzione /Zc:threadSafeInit- . Se si sa che thread-safety non è necessario, usare questa opzione per generare codice leggermente più piccolo e veloce per le dichiarazioni locali statiche.
Le variabili locali statiche thread-safe usano internamente l'archiviazione locale thread per fornire un'esecuzione efficiente quando l'inizializzazione statica è già stata inizializzata. L'implementazione di questa funzionalità si basa sulle funzioni di supporto del sistema operativo Windows in Windows Vista e nei sistemi operativi successivi. Windows XP, Windows Server 2003 e sistemi operativi meno recenti non dispongono di questo supporto, quindi non ottengono il vantaggio di efficienza. Questi sistemi operativi hanno anche un limite inferiore per il numero di sezioni TLS che possono essere caricate. Il superamento del limite di sezione TLS può causare un arresto anomalo. Se si tratta di un problema nel codice, soprattutto nel codice che deve essere eseguito nei sistemi operativi meno recenti, usare /Zc:threadSafeInit- per disabilitare il codice di inizializzazione thread-safe.
Per altre informazioni sui problemi di conformità in Visual C++, vedere Nonstandard Behavior.
Per impostare l'opzione del compilatore nell'ambiente di sviluppo di Visual Studio
Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per informazioni dettagliate, vedere Impostare il compilatore e le proprietà di compilazione.
Dal menu a discesa Configurazioni scegliere Tutte le configurazioni.
Selezionare la pagina delle proprietà Proprietà di configurazione>C/C++>Riga di comando.
Modificare la proprietà Opzioni aggiuntive per includere /Zc:threadSafeInit o /Zc:threadSafeInit- e quindi scegliere OK.
Vedi anche
Opzioni del compilatore MSVC
Sintassi della riga di comando del compilatore MSVC
/Zc (conformità)