Adakah Singleton Tanpa Kunci dengan Operasi Atom merupakan Pendekatan yang Lebih Baik dalam C 11 Daripada Menggunakan Mutexes?

Susan Sarandon
Lepaskan: 2024-10-31 21:21:02
asal
426 orang telah melayarinya

Is a Lock-Free Singleton with Atomic Operations a Better Approach in C  11 Than Using Mutexes?

Melaksanakan Singleton Multithreaded dalam C 11

Dengan kemunculan keupayaan multithreading C 11, pendekatan tradisional menggunakan mutex untuk pelaksanaan singleton mungkin tidak lebih lama lagi diperlukan atas sebab prestasi.

Singleton Tanpa Kunci dengan Operasi Atom

Satu kaedah untuk mencipta singleton tanpa mutex adalah melalui operasi atom. Menggunakan pembolehubah atomic bool dan fungsi std::atomic_compare_exchange_strong(), anda boleh melaksanakan penyelesaian berikut:

<code class="cpp">public class Singleton {
    private static atomic<int> flag = 0;
    private static string name;

    public static bool initialized() {
        return (flag == 2);
    }

    public static bool initialize(string name_) {
        if (flag == 2) {
            return false; // Already initialized
        }
        int exp = 0, desr = 1;
        bool willInitialize = std::atomic_compare_exchange_strong(&flag, &exp, desr);

        if (!willInitialize) {
            return false; // Another thread CASed before us
        }
        initialize_impl(name_);
        assert(flag == 1);
        flag = 2;
        return true;
    }

    private static void initialize_impl(string name) {
        name = name;
    }
}</code>
Salin selepas log masuk

C 11 Thread-Safe Initialization

C 11 memperkenalkan pemulaan statik selamat benang, menghilangkan keperluan untuk mengunci manual. Pelaksanaan serentak menunggu pembolehubah tempatan statik dimulakan, membenarkan pelaksanaan dipermudahkan berikut:

<code class="cpp">static Singleton& get() {
  static Singleton instance;
  return instance;
}</code>
Salin selepas log masuk

Alternatif kepada Singleton

Adalah penting untuk ambil perhatian bahawa sementara penyelesaian ini menyediakan pelaksanaan singleton selamat berbilang benang, corak Singleton itu sendiri bukanlah pilihan reka bentuk yang terbaik. Pertimbangkan alternatif seperti menghantar objek sebagai hujah fungsi, menggunakan suntikan kebergantungan atau menggunakan Corak Keadaan.

Atas ialah kandungan terperinci Adakah Singleton Tanpa Kunci dengan Operasi Atom merupakan Pendekatan yang Lebih Baik dalam C 11 Daripada Menggunakan Mutexes?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!