Rumah >pembangunan bahagian belakang >C++ >Adakah Benang Pelaksanaan Singleton Meyers Selamat dalam C 11?

Adakah Benang Pelaksanaan Singleton Meyers Selamat dalam C 11?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-21 07:26:10516semak imbas

Is Meyers' Singleton Implementation Thread-Safe in C  11?

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:

  • Visual Studio: Disokong sejak Visual Studio 2015
  • GCC: Disokong sejak GCC 4.3

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!

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