對於一個無界的阻塞隊列而言,其實現非常簡單,即用一個鎖(鎖隊列)+ 一個條件變量(判空)即可。那么對於一個有界阻塞隊列而言,其隊列的容量有上限,其實只要再加一個條件變量用來判斷是否滿即可。 綜上,我們需要 mutex: 保護隊列的讀寫操作 notEmptyCV: 條件變量,在take時 ...
實現動機 工廠方法是最簡單地創建派生類對象的方法,也是很常用的,工廠方法內部使用switch case根據不同的key去創建不同的派生類對象,下面是一個偽代碼。 隨着時間的流逝,消息種類越來越多,這個switch case會越來越長,我在一個開源項目中看到過一百多個case語句,顯然這種簡單工廠已經不堪負荷,這樣的代碼對於維護者來說也是一個噩夢。要消除這些長長的switch case語句是一個需要 ...
2015-12-30 21:51 9 6756 推薦指數:
對於一個無界的阻塞隊列而言,其實現非常簡單,即用一個鎖(鎖隊列)+ 一個條件變量(判空)即可。那么對於一個有界阻塞隊列而言,其隊列的容量有上限,其實只要再加一個條件變量用來判斷是否滿即可。 綜上,我們需要 mutex: 保護隊列的讀寫操作 notEmptyCV: 條件變量,在take時 ...
前言 C++11之前我們使用線程需要系統提供API、posix線程庫或者使用boost提供的線程庫,C++11后就加入了跨平台的線程類std::thread,線程同步相關類std::mutex、std::lock_guard、std::condition_variable、std ...
在單位寫代碼沒法用c++11,為了方便寫代碼,今天趁着空閑時間寫了個unique_ptr的簡單實現 測試代碼 [NEWOBJ][Obj] this =00000000002C7D20 nMyMem= 100 ...
boost中有一個lexical_cast可以用統一的方式來做基本類型之間的轉換,比如字符串到數字,數字到字符串,bool和字符串及數字之間的相互轉換。boost::lexical_cast的用法比較簡單: View Code c++11中缺少 ...
AOP介紹 AOP(Aspect-Oriented Programming,面向方面編程),可以解決面向對象編程中的一些問題,是OOP的一種有益補充。面向對象編程中的繼承是一種從上而下的關系,不 ...
c++11 閉包的實現 什么是閉包 閉包有很多種定義,一種說法是,閉包是帶有上下文的函數。說白了,就是有狀態的函數。更直接一些,不就是個類嗎?換了個名字而已。 一個函數,帶上了一個狀態,就變成了閉包了。那什么叫 “帶上狀態” 呢? 意思是這個閉包有屬於自己的變量,這些個變量的值是創建閉包 ...
實現一個簡易版的c++11 tuple。 我使用的編譯器是gcc,codeblocks13.12自帶的,哪個版本我不熟gcc也沒去查。 大致看了下他家的tuple實現,多繼承,tuple之上還有2個輔助類,走的是類似loki中GenScatterHierarchy的路子。1092行代碼,不是蓋 ...
原文轉自 https://blog.csdn.net/lmb1612977696/article/details/77712170 c++11加入了很多新的特性,值得我們去探索。 先看一個例子:普通的、不能自動的釋放自己的鎖 借助對象的析構函數自動調用的原理 ...