【Linux】多線程之單例模式

多線程之單例模式

  • 什么是設計模式,都有哪些設計模式
  • 單例模式
    • 餓漢模式
    • 懶漢模式

什么是設計模式,都有哪些設計模式

設計模式就是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性、程序的重用性。

創建模式中:

抽象工廠模式 ,提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。
生成器模式,將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。
工廠方法模式,定義一個用于創建對象的接口,讓子類決定將哪一個類實例化。工廠方法使一個類的實例化延遲到其子類。
原型模式,用原型實例指定創建對象的種類,并且通過拷貝這個原型來創建新的對象。
單例模式,保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。

結構模式中:

適配器模式,將一個類的接口轉換成客戶希望的另外一個接口。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
橋接模式,將抽象部分與它的實現部分分離,使它們都可以獨立地變化。
組合模式,將對象組合成樹形結構以表示“部分-整體”的層次結構。它使得客戶對單個對象和復合對象的使用具有一致性。
容器模式
修飾模式,動態地給一個對象添加一些額外的職責。就擴展功能而言, 它比生成子類方式更為靈活。 擴展性模式 外觀模式
享元模式
管道與過濾器模式
代理模式,為其他對象提供一個代理以控制對這個對象的訪問。

行為模式中

責任鏈模式,為解除請求的發送者和接收者之間耦合,而使多個對象都有機會處理這個請求。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它。
命令模式,將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日志,以及支持可取消的操作。

單例模式

一個類只能創建一個對象,即單例模式,該模式可以保證系統中該類只有一個實例,并提供一個 訪問它的全局訪問點,該實例被所有程序模塊共享,而單例模式有兩種實現模式:懶漢模式和餓漢模式

餓漢模式

這個單例類對象,在程序啟動之初就直接創建(由于定義了一個靜態的類對象)

class Singleton{public:static Singleton* GetInstance(){return &m_instance;}private:// 構造函數私有Singleton(){};// C++98 防拷貝Singleton(Singleton const&); Singleton& operator=(Singleton const&); // or// C++11Singleton(Singleton const&) = delete; Singleton& operator=(Singleton const&) = delete; static Singleton m_instance;};Singleton Singleton::m_instance;

優點:實現簡單,適用于多線程高并發環境下使用餓漢模式創建的單例類可以避免資源競爭
缺點:可能會導致進程啟動慢,如果有多個單例類對象啟動時順序是不確定的

懶漢模式

這個單例對象,只有在程序被調用的時候,才去創建類的對象(根本原因是定義了一個靜態的類對象指針)

class Singleton
{public:static Singleton* GetInstance() {// 注意這里一定要使用Double-Check的方式加鎖,才能保證效率和線程安全if (nullptr == m_pInstance) {m_mtx.lock();if (nullptr == m_pInstance) {m_pInstance = new Singleton();}m_mtx.unlock();}return m_pInstance;}// 實現一個內嵌垃圾回收類    class CGarbo {public:~CGarbo(){if (Singleton::m_pInstance)delete Singleton::m_pInstance;}};// 定義一個靜態成員變量,程序結束時,系統會自動調用它的析構函數從而釋放單例對象static CGarbo Garbo;private:// 構造函數私有Singleton(){};// 防拷貝Singleton(Singleton const&);Singleton& operator=(Singleton const&);static Singleton* m_pInstance; // 單例對象指針static mutex m_mtx;   //互斥鎖
};
Singleton* Singleton::m_pInstance = nullptr;
Singleton::CGarbo Garbo;
mutex Singleton::m_mtx;
int main()
{thread t1([]{cout << &Singleton::GetInstance() << endl; });thread t2([]{cout << &Singleton::GetInstance() << endl; });t1.join();t2.join();cout << &Singleton::GetInstance() << endl;cout << &Singleton::GetInstance() << endl;return 0;
}

優點:第一次使用實例對象時,才會創建對象,進程啟動無負載,多個單例實例啟動順序自由控制
缺點:復雜

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/39437.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39437.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39437.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI繪畫 | 一文學會Midjourney繪畫,創作自己的AI作品(快速入門+參數介紹)

一、生成第一個AI圖片 首先&#xff0c;生成將中文描述詞翻譯成英文 然后在輸入端輸入&#xff1a;/imagine prompt:Bravely running boy in Q version, cute head portrait 最后&#xff0c;稍等一會即可輸出效果 說明&#xff1a; 下面的U1、U2、U3、U4代表的第一張、第二張…

Nacos AP架構集群搭建(Windows)

手寫SpringCloud項目地址&#xff0c;求個star github:https://github.com/huangjianguo2000/spring-cloud-lightweight gitee:https://gitee.com/huangjianguo2000/spring-cloud-lightweigh 目錄&#xff1a; 一&#xff1a;初始化MySQL 二&#xff1a;復制粘貼三份Nacos文…

分類預測 | MATLAB實現GAPSO-BP遺傳算法組合粒子群算法優化BP神經網絡多輸入分類預測

分類預測 | MATLAB實現GAPSO-BP遺傳算法組合粒子群算法優化BP神經網絡多輸入分類預測 目錄 分類預測 | MATLAB實現GAPSO-BP遺傳算法組合粒子群算法優化BP神經網絡多輸入分類預測預測效果基本介紹模型描述程序設計參考資料 預測效果 基本介紹 1.分類預測 | MATLAB實現GAPSO-BP遺…

YoloV8優化:通道優先卷積注意力,效果秒殺CBAM和SE等 | 即插即用系列

??????本文獨家改進:通道優先卷積注意力,采用多尺度結構來增強卷積運算捕獲空間關系的能力,解決CBAM 整合了通道注意和空間注意,但它在其輸出特征的所有通道上強制執行一致的空間注意分布。相反,SE只整合了通道注意,這限制了它選擇重要區域的能力 通道優先卷積注意…

LabVIEW使用圖像處理進行交通控制性能分析

LabVIEW使用圖像處理進行交通控制性能分析 采用普雷維特、拉普拉斯、索貝爾和任意的空間域方法對存儲的圖像進行邊緣檢測&#xff0c;并獲取實時圖像。然而&#xff0c;對四種不同空間域邊緣檢測方法的核的性能分析。 以前&#xff0c;空路圖像存儲在數據庫中&#xff0c;道路…

【JAVA】變量的作用域與生存周期

個人主頁&#xff1a;【&#x1f60a;個人主頁】 系列專欄&#xff1a;【??初識JAVA】 文章目錄 前言變量的作用域變量的生命周期局部變量全局變量 前言 變量&#xff0c;我們學習過程中逃不掉的知識&#xff0c;無論在哪種語言中我們都需要學會去合理的運用它&#xff0c;今…

自然語言處理從入門到應用——LangChain:記憶(Memory)-[記憶的存儲與應用]

分類目錄&#xff1a;《自然語言處理從入門到應用》總目錄 使用SQLite存儲的實體記憶 我們將創建一個簡單的對話鏈&#xff0c;該鏈使用ConversationEntityMemory&#xff0c;并使用SqliteEntityStore作為后端存儲。使用EntitySqliteStore作為記憶entity_store屬性上的參數&am…

excel 下載方法封裝

1.首先需要拿到后端返回的URL下載地址 2.寫個下載方法 // url 接口返回的下載地址。例如&#xff1a;https://cancer-research.oss-cn-beijing.aliyuncs.com/yuance-platform-permission/校內共享數據導入模板.xlsx // name 文件名稱 例如&#xff1a; 校內共享數據導入模板 /…

(一)Unity開發Vision Pro介紹

1.介紹 1.1 介紹 VisionOS 可實現與現實世界無縫集成并與其他虛擬內容共存的 3D 多任務體驗。這為個人生產力、生活方式和娛樂應用打開了一個充滿新可能性的世界&#xff0c;并為開發人員打開了一個全新的市場。然而&#xff0c;它也帶來了圍繞多任務處理和與身體互動的新挑戰…

Aspera替代方案:探索這些安全且可靠的文件傳輸工具

科技的發展日新月異&#xff0c;文件的傳輸方式也在不斷地更新換代。傳統的郵件附件、FTP等方式已經難以滿足人們對于傳輸速度和安全性的需求了。近年來&#xff0c;一些新興的文件傳輸工具受到了人們的關注&#xff0c;其中除了知名的Aspera之外&#xff0c;還有許多可靠安全的…

FPGA_學習_15_IP核_VIO

前一篇博客我們提到在線調試的時候&#xff0c; 可執行文件只要燒進板子&#xff0c;程序它就會自己跑起來&#xff0c;不會等你點 這個按鈕&#xff0c;它才開始跑。我們測試的模塊中&#xff0c;里面可能有幾個我們關心的信號&#xff0c;它會在程序剛運行很短的時間內發生狀…

使用GUI Guider工具開發嵌入式GUI應用 (3) - 使用label組件

使用GUI Guider工具開發嵌入式GUI應用 (3) - 使用label組件 文章目錄 使用GUI Guider工具開發嵌入式GUI應用 (3) - 使用label組件引言在GUI Guider工程中創建label組件編譯MCU工程并下載到開發板 引言 本節講述在GUI Guider中&#xff0c;應用各種UI的基本元素&#xff0c;并順…

一、window配置微軟商店中的Ubuntu,及錯誤解決方法

&#xff08;1&#xff09;首先&#xff0c;在微軟商店中搜索“Ubuntu”&#xff0c;下載你喜歡的版本(此處) &#xff08;2&#xff09;設置適用于window的Linux子系統&#xff0c;跟著紅色方框走 點擊“確定”之后&#xff0c;會提示你重啟電腦&#xff0c;按要求重啟電腦即可…

Java多線程(4)---死鎖和Synchronized加鎖流程

目錄 前言 一.synchronized 1.1概念 1.2Synchronized是什么鎖&#xff1f; 1.3Synchronized加鎖工作過程 1.4其他優化操作 二.死鎖 2.1什么是死鎖 2.2死鎖的幾個經典場景 2.3死鎖產生的條件 2.4如何解決死鎖 &#x1f381;個人主頁&#xff1a;tq02的博客_CSDN博客…

設計模式 : 單例模式筆記

文章目錄 一.單例模式二.單例模式的兩種實現方式餓漢模式懶漢模式 一.單例模式 一個類只能創建一個對象,這樣的類的設計模式就稱為單例模式,該模式保證系統中該類只能有一個實例(并且父子進程共享),一個很典型的單例類就是CSTL的內存池C單例模式的基本設計思路: 私有化構造函數…

PyTorch翻譯官網教程-LANGUAGE MODELING WITH NN.TRANSFORMER AND TORCHTEXT

官網鏈接 Language Modeling with nn.Transformer and torchtext — PyTorch Tutorials 2.0.1cu117 documentation 使用 NN.TRANSFORMER 和 TORCHTEXT進行語言建模 這是一個關于訓練模型使用nn.Transformer來預測序列中的下一個單詞的教程。 PyTorch 1.2版本包含了一個基于論…

Shell編程——弱數據類型的腳本語言快速入門指南

目錄 Linux Shell 數據類型 變量類型 運算符 算術運算符 賦值運算符 拼接運算符 比較運算符 關系運算符 控制結構 順序結構 條件分支結構 if 條件語句 case 分支語句 循環結構 for 循環 while 循環 until 循環 break 語句 continue語句 函數 函數定義 …

Stable Diffusion Webui源碼剖析

1、關鍵python依賴 &#xff08;1&#xff09;xformers&#xff1a;優化加速方案。它可以對模型進行適當的優化來加速圖片生成并降低顯存占用。缺點是輸出圖像不穩定&#xff0c;有可能比不開Xformers略差。 &#xff08;2&#xff09;GFPGAN&#xff1a;它是騰訊開源的人臉修…

大數據掃盲(1): 數據倉庫與ETL的關系及ETL工具推薦

在數字化時代&#xff0c;數據成為了企業決策的關鍵支持。然而&#xff0c;隨著數據不斷增長&#xff0c;有效地管理和利用這些數據變得至關重要。數據倉庫和ETL工具作為數據管理和分析的核心&#xff0c;將幫助企業從龐雜的數據中提取有價值信息。 一、ETL是什么&#xff1f; …

【不限于聯想Y9000P電腦關蓋再打開時黑屏的解決辦法】

不限于聯想Y9000P電腦關蓋再打開時黑屏的解決辦法 問題的前言問題的出現問題擬解決 問題的前言 事情發生在昨天&#xff0c;更新了Win11系統后&#xff1a; 最惹人注目的三處地方就是&#xff1a; 1.可以查看時間的秒數了&#xff1b; 2.右鍵展示的內容變窄了&#xff1b; 3.按…