/Zc:threadSafeInit (Inisialisasi Statis Lokal Aman Utas)
Opsi pengkompilasi /Zc:threadSafeInit memberi tahu pengkompilasi untuk menginisialisasi variabel lokal statis (cakupan fungsi) dengan cara yang aman untuk alur, menghilangkan kebutuhan akan sinkronisasi manual. Hanya inisialisasi yang aman untuk utas. Penggunaan dan modifikasi variabel lokal statis dengan beberapa utas masih harus disinkronkan secara manual. Opsi ini tersedia mulai dari Visual Studio 2015. Secara default, Visual Studio mengaktifkan opsi ini.
Sintaks
/Zc:threadSafeInit[-]
Keterangan
Dalam standar C++11, variabel cakupan blok dengan durasi penyimpanan statis atau utas harus diinisialisasi nol sebelum inisialisasi lain terjadi. Inisialisasi terjadi ketika kontrol pertama kali melewati deklarasi variabel. Jika pengecualian dilemparkan selama inisialisasi, variabel dianggap tidak diinisialisasi, dan inisialisasi dicoba kembali saat kontrol berikutnya melewati deklarasi. Jika kontrol memasukkan deklarasi secara bersamaan dengan inisialisasi, blok eksekusi bersamaan saat inisialisasi selesai. Perilaku tidak terdefinisi jika kontrol memasukkan kembali deklarasi secara rekursif selama inisialisasi. Secara default, Visual Studio yang dimulai di Visual Studio 2015 mengimplementasikan perilaku standar ini. Perilaku ini dapat ditentukan secara eksplisit dengan mengatur opsi pengkompilasi /Zc:threadSafeInit .
Opsi pengkompilasi /Zc:threadSafeInit aktif secara default. Opsi /permissive- tidak memengaruhi /Zc:threadSafeInit.
Inisialisasi variabel lokal statis yang aman bergantung pada kode yang diterapkan di pustaka run-time Universal C (UCRT). Untuk menghindari mengambil dependensi pada UCRT, atau untuk mempertahankan perilaku inisialisasi yang tidak aman dari versi Visual Studio sebelum Visual Studio 2015, gunakan opsi /Zc:threadSafeInit- . Jika Anda tahu bahwa keamanan utas tidak diperlukan, gunakan opsi ini untuk menghasilkan kode yang sedikit lebih kecil dan lebih cepat di sekitar deklarasi lokal statis.
Variabel lokal statis aman utas menggunakan penyimpanan lokal utas (TLS) secara internal untuk memberikan eksekusi yang efisien ketika statis telah diinisialisasi. Implementasi fitur ini bergantung pada fungsi dukungan sistem operasi Windows di Windows Vista dan sistem operasi yang lebih baru. Windows XP, Windows Server 2003, dan sistem operasi yang lebih lama tidak memiliki dukungan ini, sehingga mereka tidak mendapatkan keuntungan efisiensi. Sistem operasi ini juga memiliki batas yang lebih rendah pada jumlah bagian TLS yang dapat dimuat. Melebihi batas bagian TLS dapat menyebabkan crash. Jika ini adalah masalah dalam kode Anda, terutama dalam kode yang harus berjalan pada sistem operasi yang lebih lama, gunakan /Zc:threadSafeInit- untuk menonaktifkan kode inisialisasi thread-safe.
Untuk informasi selengkapnya tentang masalah kesuaian di Visual C++, lihat Perilaku Nonstandar.
Untuk mengatur opsi pengkompilasi ini di lingkungan pengembangan Visual Studio
Buka kotak dialog Halaman Properti proyek. Untuk detailnya, lihat Mengatur pengkompilasi C++ dan membuat properti di Visual Studio.
Dari menu drop-down Konfigurasi , pilih Semua Konfigurasi.
Pilih halaman properti Properti>Konfigurasi C/C++>Baris Perintah.
Ubah properti Opsi Tambahan untuk menyertakan /Zc:threadSafeInit atau /Zc:threadSafeInit- lalu pilih OK.
Lihat juga
Opsi Pengkompilasi MSVC
Sintaks Baris Perintah Pengkompilasi MSVC
/Zc (Kesuaian)