原创 使用stl的queue實現線程安全隊列

簡介 近日有朋友問起線程安全隊列的問題。本文基於stl的queue容器實現了線程安全的隊列,可多線程生產,多線程消費。同時與基於boost的circular_buffer實現的環形緩衝區相比較,性能略優(實驗測試下來優勢也不大,不到5%)。

原创 訪問者模式

簡介 訪問者模式,表示一個對於容器中各對象的操作,它讓你可以在不改變容器總對象的情況下定義一個新的操作。 UML類圖 示例 學校裏有操場,教室,訪問者可以爲學生和老師,學生在教室學習,老師在教課,學生在操場玩耍,老師在監督,各個類請先自己

原创 模板模式

簡介 模板模式,在基類中定義了算法(一系列步驟)的骨架,在一些子類中推遲了某些步驟的實現。模板模式讓子類重新定義了一些步驟,而不用改變算法的骨架。 UML類圖 示例 模板模式,在實際中比較常見。現在的軟件經常有很多服務的進程構成,每個服務

原创 備忘錄模式

簡介 備忘錄模式,不需要違反封裝,捕獲這個對象的狀態,並且在外部保存對象的內部狀態,以使對象可以恢復到之前的狀態。 UML類圖 示例 word編輯器提供了undo功能,在這裏我們可以簡單模擬一下此功能的實現,只顯示最近的一個單詞。備忘錄相

原创 中介者模式

簡介 中介者模式,定義了一個封裝了很多交互者的對象,中介者不需要交互者之間彼此顯示的引用,並且可以獨立地改變它們的交互。將對象之間N對N的關係,簡化成了1對N的關係。現實中的中介者也很多,有房產中介,黃牛,媒人等。 UML類圖 示例 我們

原创 解釋器模式

簡介 解釋器模式的定義是對於指定的語言,定義它的語法,並定義一個解釋器,使用該語法來解釋句子。解釋器模式的使用的範圍比較小,因此使用並不多見。多常用於詞法解析,例如sql語句解析,正則表達式解析,編譯器語法解析,計算表達式解析等。 UML類

原创 命令模式

簡介 命令模式,將一個請求封裝成一個對象,因此你可以將不同的請求封裝成不同的對象,實現調用操作的對象和實際處理的對象之間的解耦;對請求排隊或者記錄日誌,以及支持可撤銷操作。 UML類圖 示例 電視機遙控器可以看作UML圖中的CInvoke

原创 責任鏈模式

簡介 責任鏈模式,使責任鏈上的每個對象都有機會處理請求,避免請求的發送者和接收者耦合在一起。將接收對象鏈接起來,把請求沿着這條鏈傳遞,直到有對象可以處理它。 UML類圖 示例 現在出了事故,政府一般使用問責的方法。如果事情太大,最高領導人

原创 享元模式

簡介 享元模式的英文名是flyweight,在體育運動中指輕量級的,它使用共享支持大量細粒度對象的複用。享元模式避免了大量對象的創建,因此節省了很多內存空間。 UML類圖 示例 在linux下,可以創建軟鏈接來實現多個鏈接,但只有一個文件

原创 外觀模式

簡介 外觀模式將一系列子系統中的接口統一成標準的接口,外觀模式提供了高水平的接口,使子系統更容易使用。外觀模式在設計中經常可見,它方便了客戶端的調用。 UML類圖 示例 現在政府的辦事效率比過去提高了不少,外觀模式的思維還是起到了一定作用

原创 橋接模式

簡介 橋接模式是將它的抽象部分和實現部分分離,使它們可以獨立的變化。抽象部門和實現部分是獨立的,通過它們的組合可以派生出很多不同類型的對象。在一個系統內如果有兩個獨立變化的維度,使用橋接模式可以減少類的數量。 UML類圖 示例 我們現在開

原创 工廠方法模式

簡介 工廠方法模式可以看作是抽象工廠模式的一個特例,當抽象工廠模式創建的產品個數爲1時,就成了工廠方法模式。工廠方法模式定義了創建一個對象的接口,由子類來決定實例化的類型。 UML類圖 示例 產品類,product.h #ifndef P

原创 建造者模式

簡介 建造者模式是指將複雜對象的表示和對象的表示分離出來,這裏的“複雜”是很關鍵的。如果是很簡單的對象,不需要使用建造者模式。 UML類圖 示例 大飛機可以說是一個很複雜的對象了,它裏面集成了各種各樣的系統。假設我們簡單抽象分爲發動機,機

原创 設計模式淺析(C++)

寫在前面的話 設計模式對於軟件開發人員來說,重要性不言而喻。使用設計模式的主要目的是使軟件可維護,擴展性好。它提供了一套方法來匹配我們開發中經常遇到的一些場景,GOF四人組提出了最初的23種設計模式,至今還在被許多人使用。然而我們很多時候,

原创 linux下進程鎖重入導致的死鎖

一.問題現象 客戶端收不到服務端的請求,查看服務端不再響應。現將定位過程記錄如下。 二.問題調試過程 使用gdb attach上該服務的進程後,發現有工作線程卡在了鎖的獲取上,如圖 該進程的15號線程,停在了獲取鎖上,切到該線程的第3幀,查