C 中線程安全的單例模式

2021-06-28 23:12:42 字數 1039 閱讀 4847

這是從公司內網上轉過來的,總結的不錯,就記錄了,這裡默默感謝下。

一、即第一次呼叫該類例項的時候才產生乙個新的該類例項,並在以後僅返回此例項。

需要用鎖,來保證其執行緒安全性:原因:多個執行緒可能進入判斷是否已經存在例項的if語句,從而non thread safety.

使用double-check來保證thread safety.但是如果處理大量資料時,該鎖才成為嚴重的效能瓶頸。

1、靜態成員例項:

class singleton

public:

static singleton* getinstance();

};singleton* singleton::getinstance()

unlock();

}return m_instance;

}

2、內部靜態例項

這裡需要注意的是,c++0x以後,要求編譯器保證內部靜態變數的執行緒安全性,可以不加鎖。但c++ 0x以前,仍需要加鎖。

class singletoninside

public:

static singletoninside* getinstance()

};

三、

即無論是否呼叫該類的例項,在程式開始時就會產生乙個該類的例項,並在以後僅返回此例項。

由靜態初始化例項保證其執行緒安全性,why?因為靜態例項初始化在程式開始時進入主函式之前就由主線程以單執行緒方式完成了初始化,不必擔心多執行緒問題。

故在效能需求較高時,應使用這種模式,避免頻繁的鎖爭奪。

class singletonstatic

public:

static const singletonstatic* getinstance()

};//外部初始化 before invoke main

const singletonstatic* singletonstatic::m_instance = new singletonstatic;

完。

Java中線程安全的單例模式

chen gangl 104人閱讀 2013 07 25 11 23 13 寫出乙個單例模式 singleton pattern public final class eagersingleton public static eagersingleton getsingleinstance 這種寫法...

c 多執行緒單例模式 執行緒安全C 單例模式

我對此處記錄的單例模式有一些疑問 http us library ff650316.aspx 以下 摘自該文章 using system public sealed class singleton private static volatile singleton instance private ...

Spring中線程安全的單例模式原始碼分析

最近學習spring aop原始碼時,看到了spring原始碼中十分驚豔的乙個執行緒安全類,所以特意記錄下來。public abstract class globaladvisoradapterregistry 重置單例物件 static void reset 分析這段原始碼前,首先得介紹一下單例模...