linux下c++ 實現單例模式
singleton.h,下面是原始碼
#include <unistd.h> #include <pthread.h> using namespace std; class Lock { private: pthread_mutex_t m_lock; public: Lock(pthread_mutex_t cs) : m_lock(cs) { pthread_mutex_lock(&m_lock); } ~Lock() { pthread_mutex_unlock(&m_lock); } };//鎖類,實現多執行緒環境下高效工作 class Singleton { private: Singleton() {}; Singleton(const Singleton &); Singleton& operator = (const Singleton &); public: static Singleton *Instantialize(); static Singleton *pInstance; static pthread_mutex_t mutex; }; #endif
singleton.cc檔案
<pre name="code" class="html">#include "singleton.h" pthread_mutex_t Singleton::mutex = PTHREAD_MUTEX_INITIALIZER; Singleton* Singleton::pInstance = 0; Singleton* Singleton::Instantialize() { if(pInstance == NULL) { //double check Lock lock(mutex); //用lock實現執行緒安全,用資源管理類,實現異常安全 //使用資源管理類,在丟擲異常的時候,資源管理類物件會被析構,析構總是發生的無論是因為異常丟擲還是語句塊結束。 if(pInstance == NULL) { pInstance = new Singleton(); } } return pInstance; } ~
tmain.cc
<pre name="code" class="html">#include <iostream> #include <cassert> #include <unistd.h> #include <pthread.h> #include "singleton.h" int main(int argc, char *argv[]) { Singleton *p = Singleton::Instantialize(); Singleton *q = Singleton::Instantialize(); assert(p != q); return 0; }
makefile
<pre name="code" class="html">#lizhiming
CC=gcc
CXX=g++
AR=ar
ARFLAGS=cru
CURRENT_DIR=$(shell echo `pwd`)
PARENT_DIRNAME=$(shell basename $(shell dirname $(CURRENT_DIR)))
SOURCE_DIR=$(CURRENT_DIR)/src
PREFIX=${CURRENT_DIR}
DEBUG :=
CFLAGS := $(DEBUG) -g -c -fPIC -Wshadow -Wcast-qual -Wcast-align \
-Wwrite-strings -Wsign-compare -Winvalid-pch -fms-extensions \
-Wall \
-I./include
CPPFLAGS=$(CFLAGS) -Woverloaded-virtual -Wsign-promo -fno-gnu-keywords
LDFLAGS=-L/usr/local/lib \
-lpthread\
DIRNAME=$(shell basename `pwd`)
SRCXXS := $(wildcard *.cc) \
$(wildcard ./src/*.cc)
SRCS := $(SRCXXS)
CXXOBJS := $(patsubst %.cc, %.o, $(SRCXXS))
OBJS := ${CXXOBJS} \
DEPS := $(patsubst %.o, %.d, $(OBJS))
TARGET := lib$(PARENT_DIRNAME)_$(DIRNAME).so
ARFLAGS := -cvq
TARGET_A_LIB := lib$(PARENT_DIRNAME)_$(DIRNAME).a
all : $(TARGET) $(TARGET_A_LIB)
$(TARGET_A_LIB): $(OBJS)
@ar $(ARFLAGS) [email protected] $^
@ranlib [email protected]
$(TARGET) : $(OBJS)
$(CXX) $(OBJS) $(LDFLAGS) -o [email protected] -shared
-include $(DEPS)
%.o : %.cc
$(CXX) $(CPPFLAGS) $< -o [email protected]
t:
@echo "DIRNAME:" $(DIRNAME)
@echo "PARENT_DIRNAME:" $(PARENT_DIRNAME)
@echo "SRCS:" $(SRCS)
@echo "OBJS:" $(OBJS)
@echo "CFLAGS:" $(CFLAGS)
@echo "CPPFLAGS:" $(CPPFLAGS)
@echo "ARFLAGS:" $(ARFLAGS)
clean:
rm -rf *.o *.d *.a $(OBJS) $(DEPS) $(TARGET)
相關推薦
linux下c++ 實現單例模式
singleton.h,下面是原始碼#include <unistd.h> #include <pthread.h> using namespace std; class Lock { private: pthr
C++實現單例模式
提幾個問題吧 1.執行緒安全 2.單件物件與物件彼此依賴,析構可能出現問題 3.必須從此類派生 有時候想想,單件這東西真是有點多餘,文件齊全命名規範的全域性變數或全域性函式完全不會有問題。
C++實現單例模式(包括採用C++11中的智慧指標)
對於設計模式來說,以前只是看過基礎的理論,很多都沒有實現和使用過。這段時間看到了別人C++程式碼中使用了單例模式,發現了很多新的東西,特此總結記錄一下。說話比較囉嗦,希望由淺入深,幫助大家理解! 單例模式,顧名思義,即一個類只有一個例項物件。C++一般的方法
C++ 實現單例模式
單例模式是任何面嚮物件語言繞不過的,單例模式是很有必要的,接下來我用最樸素的語言來解釋和記錄單例模式的學習。什麼是單例模式?單例模式就是一個類只能被例項化一次 ,更準確的說是只能有一個例項化的物件的類。建立一個單例模式的類(初想)一個類只能有一個例項化的物件,那麼這個類就要禁
用C++實現單例模式4——C++11實現
std::atomic<Singleton*> Singleton::m_instance; std::mutex Singleton::m_mutex; Singleton* Singleton::getInstance() { Singleton* tmp = m_instance
利用c++的private和static實現單例模式
精髓就是 將建構函式設定為private屬性,並且將複製建構函式和賦值建構函式也設定為private屬性,這樣的話,就無法在外部建立物件,所以此時還需要一個public的函式:getHumanInterface(),這個函式來呼叫private屬性的建構函式來生成我們需要的物件,並且將這個物
【C++】單例模式之C++實現
單例模式的概念 只允許一個產生一個物件的類單例模式的實現方法 1.單例類保證全域性只有唯一一個自行建立的例項物件 2.單例類提供獲取這個唯一例項的介面單例模式的優缺點 優點 (1)阻止其他度物件例項化
C++ (設計模式)實現單例模式
設計模式 從實踐的角度來看,設計模式有兩個重要的屬性。首先,它們描述了經過驗證的、成功的設計技術,這些技術可以按上下文相關的方式進行定製,一遍滿足新的設計場合的要求。其次,並且可能更重要的是,在提及某個特定模式的應用時不僅包括其中用到的技術,還包括應用該模式的動因以及應用後所達到的效果。
C#/.NET 單例模式——懶漢式,餓漢式,三種實現方法
C# 單例模式 ——懶漢式,餓漢式# 註釋: /// 單例模式 /// /// 餓漢式 :第一時間建立例項,類載入就馬上建立 /// 懶漢式 :需要才建立例項,延遲載入 /// /// 單例模式會長期持有一個物件,不會釋放 /// 普通例項使用完後釋放 /// /// 單例
C++ Singleton (單例) 模式最優實現
J. Nakamura 把它叫作 "Gamma Singleton", 因為這是 Gamma 在他大名鼎鼎的 <<設計模式>> (<<Design Patterns>>) [Gamma] 一書採用的方法. 稱它為 "懶漢模式" 是因為單例例項只在第一次被使
C++如何實現單例模式
C++有時會用到單例模式,比如和資料庫連線的類,我們只需要一個物件,那麼這時候我們就要限制類物件產生的數量,允許一個類產生一個物件,如何讓一個類產生一個物件呢,也就是實現單例模式? 方法一:將建構函式
(C++)用模板或巨集實現單例模式
最近在cocos2d-x開發中經常會用到單例模式,而每個單例模式類實際上具備相似的基礎結構,為了便於快速寫出一個具有單例模式的類,可以藉助模板或者巨集。 1.單例模式的類實現 首先,給出一個基本的實現單例模式的程式碼: class Singleton { public:
C++:利用靜態成員實現“單例模式”
在網上看了兩三天的網課,瞭解了一下C++,正好做作業遇到一個問題,解決之後覺得有必要寫到部落格裡,就發出來了。 問題是:如何實現“單例模式”,也就是說某個物件只能有一個例項。 思路: 1.需要一個
溫故而知新(java實現)單例模式的七種寫法
反序 防止 代碼 工作 html 我想 變種 evel 才會 第一種(懶漢,線程不安全): Java代碼 public class Singleton { private static Singleton instance; private S
c++之單例模式
lsi 但是 desc 模式 單例模式 ron spl 希望 構造函數 1 本篇主要討論下多線程下的單例模式實現: 首先是 double check 實現方式: 這種模式可以滿足多線程環境下,只產生一個實例。 template<typename T>
【C#】單例模式<機房重構>
機房 .sh 不能 是否 gist 應用 調用方法 單例模式 sender 前言 在機房重構之前。我們學習了設計模式。在這次重構中,我們的任務就是將這些模式,加入到機房的重構中去。如今先來解決一個最簡單的問題——窗口的超生。 假設不加以限
c++的單例模式及c++11對單例模式的優化
on() end per let namespace lease 是否 存在 建立 單例模式 單例模式,可以說設計模式中最常應用的一種模式了,據說也是面試官最喜歡的題目。但是如果沒有學過設計模式的人,可能不會想到要去應用單例模式,面對單例模式適用的情況,可能會優先考慮使用全
Java枚舉enum以及應用:枚舉實現單例模式
tee configure adr 自由 這樣的 pre 單例模式 做到 build 枚舉作為一個常規的語言概念,一直到Java5才誕生不得不說有點奇怪,以至於到現在為止很多程序員仍然更喜歡用static final的形式去命名常量而不使用,一般情況下,Java程序員用這種
Python 實現單例模式
python 單例模式 Python 實現單例模式 # 使用Python實現單例模式 # 方法一: 使用__new__方法 class SingleTon(object): def __new__(cls, *args, **kwargs): if not ha
Linux下c實現域名轉IP的方法封裝
rrd dbv mvm com inf adk lan fad bho 蝕古戮一爸下戀墩諂棧鐘啥材諭http://jz.docin.com/kjr58937 囪弛探刻煌俺厴嘲蹤以洶趴敵柿http://www.docin.com/app/user/userinfo?useri