多核心環境使用改進的單例模式

2021-05-21 18:51:52 字數 877 閱讀 1077

同事最近在編寫

cache server

的hash

演算法的時候,碰到了多核心

cpu

我們常常使用單例模式建立乙個可以被多執行緒共享的物件。傳統的方法是使用乙個

static

變數或者使用

double check+lock

手工處理單例。但是在進入了多核、

64位時代後,就不在那麼簡單了。尤其是

ia64

(安騰64

結構,伺服器

cpu,非筆記本和台式電腦的

cpu)的記憶體是弱記憶體模型(執行

memory reordering

的策略,

弱型別表示不會嚴格按照程式語句的執行順序執行)。

也就是說,即使使用了「多執行緒安全」的

static

變數和「

double lock

」模式,在

ia64

上仍然會出現建立兩次單例的情況。下面的語句仍然存在會建立兩次例項的可能:

public class singleton

public singleton instance}}

return instance;}}

} 解決辦法是使用改進的單例模式

public class singleton 

public singleton instance 

} }

return instance; }

}如果想知道這麼做具體的技術細節,可以檢視相關的資料。否則請記住結論,因為單例是我們常常使用的設計模式,所以希望以後大家都使用上面的方式建立單例,可以避免遇到多核

cpu的問題。

C 11改進單例模式

我們在寫單例模式的時候會遇到乙個問題,就是多種型別的單例可能需要建立多個型別的單例,主要是因為建立單例物件的建構函式無法統一,各種型別的形參不盡相同,導致我們不容易做乙個所有型別都通過的單例。現在c 11幫助我們解決了這個問題,解決這個問題的關鍵靠的是c 11的可變模板引數,下面看 template...

單例設計模式核心實現

利用私有化構造方法的方式實現 該模式下single類中直接就例項化了物件如果沒有使用則會浪費記憶體空間 public class singleton class single static single instance newsingle public static single getinsta...

iOS 單例模式的使用

單例有什麼用?單例就是說在程式執行過程中邏輯上保持唯一性的物件。什麼時候會用到單例呢,幾乎所有工程都應該用到單例,因為不論任何程式在設計的時候都需要設計自己的model層,模型會有很多但是肯定需要乙個模型代表自己的程式本身,然後引用一大堆程式本身唯一的東西,比如程式當前的使用者資訊,當前的快取資訊,...