第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如果我想把mutex換成spinlock,我該怎么寫?。?/h1>

如果我想把mutex換成spinlock,我該怎么寫???

C++
波斯汪 2023-05-03 17:13:00
我寫了一個(gè)單例類,使用了雙重檢查鎖定的方法,確保只有一個(gè)類實(shí)例生成。其中我使用mutex,從而實(shí)現(xiàn)鎖定方法。(單純的替換mutex->spinlock好像會(huì)報(bào)編譯錯(cuò)誤。另外,順便問下,把mutex換成spinlock在Singleton模式下會(huì)有比較大的性能提升么?(目測(cè)不會(huì)。。。= =。。我的代碼如下:#ifndef SINGLETON#define SINGLETONclass CSingleton{public:    static CSingleton* getInstance()     {        if(!uniqueInstance)         {            pthread_mutex_lock(&mutex);            if(!uniqueInstance)             {                 uniqueInstance = new CSingleton();             }            pthread_mutex_unlock(&mutex);         }        return uniqueInstance;     }    void fill(int x){ val += x; }    int getVal(){ return val; }private:    int val;    CSingleton()     {         val = 0;     }    CSingleton(const CSingleton&){}     CSingleton & operator = (const CSingleton&);    static CSingleton * uniqueInstance;    static pthread_mutex_t mutex; }; CSingleton * CSingleton::uniqueInstance = NULL;pthread_mutex_t CSingleton::mutex = PTHREAD_MUTEX_INITIALIZER;#endif
查看完整描述

1 回答

?
明月笑刀無(wú)情

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊

新的 C++11 標(biāo)準(zhǔn)增加了 2 種單例的寫法

1 static 變量是線程安全的

T& getInstance ()
{    static T instance;    return instance;
}

2 使用 std::call_once,他保證了函數(shù)只會(huì)調(diào)用一次

std::once_flag flag;
T* instance;
T* getInstance ()
{
    std::call_once(flag, [instance]()
    {        instance = new T;
    });    return instance;
}
查看完整回答
反對(duì) 回復(fù) 2023-05-06
  • 1 回答
  • 0 關(guān)注
  • 511 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)