Rumah >pembangunan bahagian belakang >C++ >Adakah Permulaan Pembolehubah Statik Tempatan C 11 Dijamin Selamat Benang?

Adakah Permulaan Pembolehubah Statik Tempatan C 11 Dijamin Selamat Benang?

Linda Hamilton
Linda Hamiltonasal
2024-12-25 06:45:10812semak imbas

Is C  11 Local Static Variable Initialization Guaranteed to be Thread-Safe?

Pemulaan Pembolehubah Statik Tempatan yang Dijamin Selamat Benang dalam C 11

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;
}

C 11 Standard dan Benang Keselamatan

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."

Pelaksanaan Penyusun

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn