Melaksanakan Singleton Multithread-Safe dalam C 11 Tanpa Mutexes
Dalam C 11, multithreading memperkenalkan kebimbangan baharu untuk melaksanakan kelas singleton. Walaupun penggunaan mutex boleh menjamin keselamatan benang, ia mungkin menjejaskan prestasi. Artikel ini meneroka pendekatan alternatif untuk mencipta singleton tanpa kunci tanpa menggunakan mutex.
Pernyataan Masalah:
Bagaimanakah kita boleh melaksanakan singleton yang dimulakan malas dalam C 11 tanpa menggunakan mutexes atas sebab prestasi?
Penyelesaian Cadangan:
atomic_compare_exchange_strong:
Untuk mencapai permulaan tanpa kunci, kami boleh memanfaatkan fungsi std::atomic_compare_exchange_strong. Operasi atom ini membandingkan nilai jangkaan pembolehubah atom std::(bendera) dengan nilai yang dikehendaki (desr) dan, jika ia sepadan, mengemas kini pembolehubah kepada desr.
Proses Permulaan:
Dalam fungsi permulaan, kami melakukan langkah berikut:
Keselamatan Benang:
Pelaksanaan benang secara serentak dikendalikan oleh langkah-langkah berikut:
Contoh Pelaksanaan:
<code class="cpp">class Singleton { public: static Singleton& get() { static Singleton instance; return instance; } static bool initialize(const string& name); };</code>
Kesimpulan:
Dengan memanfaatkan fungsi atomic_compare_exchange_strong, kita boleh melaksanakan singleton selamat berbilang benang dalam C 11 tanpa bergantung pada mutex. Pendekatan ini memastikan bahawa hanya satu utas akan berjaya memulakan singleton pada bila-bila masa.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Singleton Tanpa Kunci dalam C 11 Tanpa Mutexes?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!