Rumah >pembangunan bahagian belakang >C++ >Adakah Permulaan Pembolehubah Statik Tempatan C 11 Dijamin Selamat Benang?
Satu soalan yang sering diperdebatkan dalam C ialah keselamatan benang bagi permulaan pembolehubah statik tempatan, seperti dalam kod berikut:
Logger& g_logger() { static Logger lg; return lg; }
Dalam piawaian C 11, gelagat pemulaan sedemikian telah dimuktamadkan dan ia kini dijamin selamat untuk benang. Bahagian 6.7 piawaian menyatakan bahawa "pembolehubah sedemikian dimulakan pada kali pertama kawalan melalui pengisytiharannya," dan bahawa "pelaksanaan serentak hendaklah menunggu untuk penyiapan permulaan." Selain itu, nota kaki pelaksanaan menjelaskan bahawa "Pelaksanaan tidak boleh menimbulkan sebarang kebuntuan sekitar pelaksanaan pemula."
Penyusun utama (gcc 4.7, vc 2011, dan clang 3.0) telah melaksanakan keperluan keselamatan benang yang disemak dengan betul. Ini bermakna bahawa pembina untuk pembolehubah lg akan dilaksanakan sekali sahaja, walaupun dengan kehadiran urutan serentak.
Perhatikan bahawa jaminan ini hanya terpakai pada permulaan itu sendiri. Akses seterusnya kepada pembolehubah melalui rujukan tidak semestinya selamat untuk benang.
Atas ialah kandungan terperinci Adakah Permulaan Pembolehubah Statik Tempatan C 11 Dijamin Selamat Benang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!