Share via


/Zc:threadSafeInit (inizializzazione statica locale thread/safe)

L'opzione del compilatore /Zc:thread Cassaforte Init 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:thread Cassaforte Init[-]

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:thread Cassaforte Init.

L'opzione del compilatore /Zc:thread Cassaforte Init è attivata per impostazione predefinita. L'opzione /permissive- non influisce su /Zc:thread Cassaforte Init.

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:thread Cassaforte Init- . 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, in particolare nel codice che deve essere eseguito su sistemi operativi meno recenti, usare /Zc:thread Cassaforte Init- 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

  1. Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per informazioni dettagliate, vedere Impostare il compilatore e le proprietà di compilazione.

  2. Dal menu a discesa Configurazioni scegliere Tutte le configurazioni.

  3. Selezionare la pagina delle proprietà Proprietà di configurazione>C/C++>Riga di comando.

  4. Modificare la proprietà Opzioni aggiuntive per includere /Zc:thread Cassaforte Init o /Zc:thread Cassaforte Init- e quindi scegliere OK.

Vedi anche

Opzioni del compilatore MSVC
Sintassi della riga di comando del compilatore MSVC
/Zc (conformità)