**如下,
#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.但是如果處理大量資料時,...