c 帶模板的執行緒安全單例模式

2021-10-10 07:44:21 字數 1512 閱讀 2041

**如下,

#pragma once

#include #include templateclass singleton

// return ptrsingleton;

//}// 方案二:略顯複雜

//static t* getinstance()

// }

// return ptrsingleto;

//}// 方案三:效率和方案二差不多

static t* getinstance()

}return ptrsingleto;

}private:

static std::atomicsingleton_;

static std::mutex mutex_;

};templatestd::atomicsingleton::singleton_ = nullptr;

templatestd::mutex singleton::mutex_;

做個簡單的測試

#include #include #include #include #include "singleton.h"

using namespace std;

class counter ;

int getcnt()

protected:

atomictotal = 0;

};void helpfunc(int n)

}int main()

); std::thread t2(() );

std::thread t3(() );

std::thread t4(() );

std::thread t5(() );

std::thread t6(() );

std::thread t7(() );

std::thread t8(() );

t1.join();

t2.join();

t3.join();

t4.join();

t5.join();

t6.join();

t7.join();

t8.join();

int result = singleton::getinstance()->getcnt();

cout << "result:" << result << endl;

auto endtime = std::chrono::high_resolution_clock::now();

auto elapsedtime = std::chrono::duration_cast(endtime - begintime);

cout << "use time:" << elapsedtime.count() <

return 0;

}

測試結果大概是:

方案一方案二

方案三如有看官發現有什麼錯誤,麻煩不吝指正,謝謝!

c 多執行緒單例模式 執行緒安全C 單例模式

我對此處記錄的單例模式有一些疑問 http us library ff650316.aspx 以下 摘自該文章 using system public sealed class singleton private static volatile singleton instance private ...

C 執行緒安全的單例模式

廢話不多說,常用的 積澱下來。一 懶漢模式 即第一次呼叫該類例項的時候才產生乙個新的該類例項,並在以後僅返回此例項。需要用鎖,來保證其執行緒安全性 原因 多個執行緒可能進入判斷是否已經存在例項的if語句,從而non thread safety.使用double check來保證thread safe...

C 執行緒安全的單例模式

一 懶漢模式 即第一次呼叫該類例項的時候才產生乙個新的該類例項,並在以後僅返回此例項。需要用鎖,來保證其執行緒安全性 原因 多個執行緒可能進入判斷是否已經存在例項的if語句,從而non thread safety.使用double check來保證thread safety.但是如果處理大量資料時,...