C linux執行緒安全單例Singleton

2021-07-14 08:32:22 字數 1353 閱讀 6441

dcl(double checked locking)

//class singleton

//:s1-

singleton* get_instance(void)

unlock();

return instance;

}

**存在的問題是:無論是否已經初始化都要加鎖,增加了負荷,已經沒有所謂的併發效能了。

//:s-2

singleton* get_instance(void)

return instance;

}

**存在的問題是:不能保證臨界區只初始化一次,沒能實現singleton的基本功能;

//:s-3

singleton* get_instance(void)

return instance;

}

**解決路上述問題——雙檢鎖模式,兼顧了效率和正確性。還來有人指出由於亂序執行的影響,dcl是靠不住的。

可以借助其他語言的一些機制,如eager initialization,memory barrier。

不過,如果支援pthread的話,可以站在巨人的肩膀,pthread_once

int pthread_once(pthread_once_t *once_control, void (*init_routine) (void));

功能:本函式使用初值為pthread_once_init的once_control變數保證init_routine()函式在本程序執行序列中僅執行一次。

在多執行緒程式設計環境下,儘管pthread_once()呼叫會出現在多個執行緒中,init_routine()函式僅執行一次,究竟在哪個執行緒中執行是不定的,是由核心排程來決定。

執行緒安全性由pthreads庫保證。

templateclass singleton:boost::noncopyable

private:

singleton();

~singleton();

static void init()

private:

static pthread_once_t ponce_;

static t* value_;

}//必須在標頭檔案中定義static 變數

templatepthread_once_t singleton::ponce_ = pthread_once_init;

templatet* singleton::value_ = null;

注意這裡沒有考慮物件銷毀

執行緒安全的單例模式(執行緒安全)示例

可以說單例模式是所有設計模式中最簡單的一種。單例模式就是說系統中對於某類的只能有乙個物件,不可能出來第二個。單例模式也是23中設計模式中在面試時少數幾個會要求寫 的模式之一。主要考察的是多執行緒下面單例模式的執行緒安全性問題。1.多執行緒安全單例模式例項一 不使用同步鎖 public class s...

執行緒安全的單例模式

廢話不多說,常用的 積澱下來。一 懶漢模式 即第一次呼叫該類例項的時候才產生乙個新的該類例項,並在以後僅返回此例項。需要用鎖,來保證其執行緒安全性 原因 多個執行緒可能進入判斷是否已經存在例項的if語句,從而non thread safety.使用double check來保證thread safe...

iOS執行緒安全單例詳解

只能生成乙個例項的類是實現了singleton模式的型別。由於設計模式在物件導向程式設計中起著舉足輕重的作用,在常用的模式中,singleton是唯一乙個能夠用短短幾十行 完整實現的模式。static pplaccountmanager sharedinstance nil 1.最簡單 非執行緒安全...