Adakah Meyers' Singleton Design Thread-Safe?
Pelaksanaan yang dibentangkan bagi corak Singleton Meyers, menggunakan pemulaan malas, menimbulkan persoalan tentang keselamatan benang. Berikut ialah analisis mengapa kod ini selamat untuk benang dalam C 11 dan cara ia mencapai keselamatan benang.
Keselamatan Benang dalam C 11
Mengikut standard C 11 , §6.7 [stmt.dcl] p4:
If control enters the declaration concurrently while the variable is being initialized, the concurrent execution shall wait for completion of the initialization.
Ini membayangkan bahawa dalam C 11, pelaksanaan di atas menjadi selamat untuk benang. Piawaian memerlukan pelaksanaan utas menunggu untuk penyiapan permulaan sebelum mengakses pembolehubah, memastikan keselamatan utas.
Sokongan dalam Penyusun
Penyusun berikut menyediakan sokongan untuk Permulaan Dinamik dan Pemusnahan dengan Concurrency, yang membolehkan ciri ini:
Nota untuk C 03
Dalam C 03, kod tidak selamat untuk benang. Meyers dalam artikelnya, "C and the Perils of Double-Checked Locking," mencadangkan bahawa dalam C 03, penguncian penuh di sekeliling kaedah instantiating ialah cara paling mudah untuk memastikan keselamatan benang merentas platform.
Atas ialah kandungan terperinci Adakah Benang Pelaksanaan Singleton Meyers Selamat dalam C 11?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!