91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

C++單例類如何實現多線程安全

c++
小樊
91
2024-07-25 17:14:15
欄目: 編程語言

在C++中實現多線程安全的單例類通常使用雙檢鎖機制(Double-Checked Locking Pattern)來確保只有一個實例被創建。下面是一個使用雙檢鎖機制實現多線程安全的單例類的示例代碼:

#include <iostream>
#include <mutex>

class Singleton {
public:
    static Singleton* getInstance() {
        if (instance == nullptr) {
            std::lock_guard<std::mutex> lock(mutex);
            if (instance == nullptr) {
                instance = new Singleton();
            }
        }
        return instance;
    }

private:
    Singleton() {}
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

    static Singleton* instance;
    static std::mutex mutex;
};

Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mutex;

int main() {
    Singleton* singleton1 = Singleton::getInstance();
    Singleton* singleton2 = Singleton::getInstance();

    std::cout << "singleton1 address: " << singleton1 << std::endl;
    std::cout << "singleton2 address: " << singleton2 << std::endl;

    return 0;
}

在上面的示例中,getInstance函數使用雙檢鎖機制,在第一次調用時檢查instance是否為nullptr,如果是,則使用std::lock_guard<std::mutex>mutex進行加鎖,然后再次檢查instance是否為nullptr,如果是,則創建一個新的Singleton實例。這樣可以確保在多線程環境下只有一個實例被創建。

需要注意的是,C++11及以上的標準庫中提供了std::call_oncestd::once_flag可以更方便地實現單例模式,可以參考這篇文章:C++11單例模式的線程安全實現

0
瓦房店市| 磐石市| 淅川县| 甘洛县| 晋中市| 延吉市| 天等县| 栖霞市| 堆龙德庆县| 巴林左旗| 黔江区| 刚察县| 博野县| 鄢陵县| 商水县| 安福县| 桑植县| 信阳市| 铅山县| 齐河县| 绍兴市| 宝山区| 玛沁县| 甘洛县| 溧水县| 富平县| 永修县| 临西县| 金沙县| 农安县| 云龙县| 大兴区| 西充县| 枣强县| 溆浦县| 邮箱| 登封市| 弥渡县| 桃园市| 宜丰县| 韶关市|