Permulaan Pembolehubah Statik Tempatan dalam C 11: Keselamatan Benang
Soalan:
Dalam C 11, adakah pembina pembolehubah tempatan statik seperti contoh di bawah berjalan tepat sekali, walaupun dalam senario berbilang benang?
Logger& g_logger() { static Logger lg; return lg; }
Jawapan:
Mengikut standard C 11 dalam bahagian 6.7, pembolehubah tempatan statik dimulakan pada kali pertama kawalan melalui pengisytiharannya. Inisialisasi ini mesti diselesaikan sebelum sebarang pelaksanaan serentak boleh diteruskan. Selain itu, pelaksanaan adalah dilarang daripada menyebabkan kebuntuan semasa pemulaan ini.
Pelaksanaan Pengkompil:
Keluaran semasa penyusun popular, termasuk gcc 4.7, vc 2011 dan denting 3.0, laksanakan tingkah laku selamat benang ini dengan betul. Oleh itu, anda boleh yakin bahawa pembolehubah statik setempat akan dimulakan sekali dan sekali sahaja, menjamin operasi yang betul dalam senario berbilang benang.
Nota Tambahan:
Ia penting untuk ambil perhatian bahawa walaupun permulaan pembolehubah tempatan statik adalah selamat untuk benang, akses seterusnya kepada pembolehubah melalui rujukan seperti lg mungkin tidak thread-safe melainkan langkah penyegerakan tambahan dilaksanakan.
Atas ialah kandungan terperinci Adakah Benang Permulaan Pembolehubah Setempat Statik C 11 Selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!