1. 程式人生 > >c++實現單例類(懶漢與餓漢)

c++實現單例類(懶漢與餓漢)

 懶漢與餓漢

  單例大約有兩種實現方法:懶漢與餓漢。

    • 懶漢:故名思義,不到萬不得已就不會去例項化類,也就是說在第一次用到類例項的時候才會去例項化,所以上邊的經典方法被歸為懶漢實現;
    • 餓漢:餓了肯定要飢不擇食。所以在單例類定義的時候就進行例項化。

  特點與選擇:

    • 由於要進行執行緒同步,所以在訪問量比較大,或者可能訪問的執行緒比較多時,採用餓漢實現,可以實現更好的效能。這是以空間換時間。
    • 在訪問量較小時,採用懶漢實現。這是以時間換空間。

3 執行緒安全的懶漢實現

  執行緒不安全,怎麼辦呢?最直觀的方法:加鎖。

#include<iostream>
using namespace std;


class single
{
protected:
single()
{}
private:
static single *s;
public:
static single* instant(); 
};
single* single::s=NULL;
single* single::instant()
{
if(s==NULL)
{
s=new single();
}
return s;
}






//懶漢加鎖s實現
class single
{
protected:
single()
{
pthread_mutex_initI(&mutex);
}
private:
static single *s;
static pthread_mutex_t mutex;
public:
static single* instant(); 
};
pthread_mutex_t single::mutex;
single* single::s=NULL;
single* single::instant()
{
if(p==NULL)
{
pthread_mutex_lock(&mutex);
if(s==NULL)
{
s=new single();
}
pthread_mutex_unlock(&mutex);
}
return s;
}
//n內部靜態變數的懶漢實現
class single
{
protected:
single()
{
pthread_mutex_init(&mutex);
}
private:
static int a;
static pthread_mutex_t mutex;
static single* instant(); 
};
pthread_mutex_t single::mutex;
single* single::instant()
{
pthread_mutex_lock(&mutex);
static single obj;
pthread_mutex_unlock(&mutex);
return &obj;
}
//e餓漢實現-》執行緒安全
class single
{
protected:
single()
{}
private:
static single *s;
public:
static single* instant(); 
};
single* single::s=new single();
single* single::instant()
{
return s;
}


相關推薦

c++實現懶漢

 懶漢與餓漢   單例大約有兩種實現方法:懶漢與餓漢。 懶漢:故名思義,不到萬不得已就不會去例項化類,也就是說在第一次用到類例項的時候才會去例項化,所以上邊的經典方法被歸為懶漢實現;餓漢:餓了肯定要飢不擇食。所以在單例類定義的時候就進行例項化。   特點與選擇: 由於要進行執行緒同步,所以在訪問量

C++實現一個模式懶漢

單例模式的特點: 1、一個類只能有一個例項。 2、一個類必須自己建立自己的唯一例項。 3、一個類必須給所有其他物件提供這一例項。 單例模式的實現: 1、將建構函式宣告為private防止被外部

模式懶漢

ati turn 還需 sin 有用 只需要 對象 clas main Java中的單例模式一般分為懶漢模式和餓漢模式,懶漢模式只有用得到的時候對象才初始化,餓漢模式無論用得到與否,都先初始化。 懶漢模式在運行的時候獲取對象比較慢(因為類加載時並沒有創建對象實例),但是加載

模式懶漢式

懶漢式: public class SingleTon{   private static SingleTon singleTon;   private SingleTon(){}   public static SingleTon getSingleTon(){     if(singleTon

C++實現模式包括採用C++11中的智慧指標

    對於設計模式來說,以前只是看過基礎的理論,很多都沒有實現和使用過。這段時間看到了別人C++程式碼中使用了單例模式,發現了很多新的東西,特此總結記錄一下。說話比較囉嗦,希望由淺入深,幫助大家理解!     單例模式,顧名思義,即一個類只有一個例項物件。C++一般的方法

C++ 模式中懶漢式

應該都知道一個單例模式怎樣去實現: 1、建構函式宣告為private或protect防止被外部函式例項化。 2、提供一個全域性的靜態方法(全域性訪問點)。 3、內部儲存一個private static的類指標儲存唯一的例項,例項的動作由一個public的類方法代勞,該方法也

模式懶漢式和及如何實現執行緒安全

單例模式有兩種:懶漢式和餓漢式。 1 #include <iostream> 2 3 using namespace std; 4 5 6 // 保證在整個程式執行期間,最多隻能有一個物件例項 7 8 9 // 懶漢式 10 // 1 、建構函式私有化 11

完整的C++ 靜態程式碼帶互斥量Mutex

今天又複習了一下靜態單例,但是以前只是知道實現靜態單例的原理以及注意事項,寫的程式碼也沒有執行過,因為靜態單例涉及到了多執行緒的知識, 並且我以前 只在Linux上用C語言的多執行緒,對windows下的C++多執行緒不瞭解。 帶有多執行緒保護的靜態單例原理我不細講,網上

設計模式之 模式懶漢式和

設計模式: 一些人總結出來用來解決特定問題的固定的解決方案。 單例模式 解決一個類在記憶體中只存在一個物件,想要保證物件的唯一。 1 為了避免其他程式過多的建立該類物件。禁止其他程式建立該類物件。 2 為了其他程式可以訪問該類物件,在本類中自定義一個物件。 3 方便其他程

模式懶漢式和

單例模式是一個類有且僅有一個例項,並且自行例項化向整個系統提供,常用的有懶漢式和餓漢式。 一、懶漢式:在第一次呼叫的時候才例項化自己。 public class Singleton {

如何正確地寫出模式懶漢式和式寫法

本文轉自大神:伍翀 原文連結 單例模式算是設計模式中最容易理解,也是最容易手寫程式碼的模式了吧。但是其中的坑卻不少,所以也常作為面試題來考。本文主要對幾種單例寫法的整理,並分析其優缺點。很多都是一些老生常談的問題,但如果你不知道如何建立一個執行緒安全的單例,不知道什

設計模式之模式懶漢式和

設計模式第一個模式通常是單例模式,是為了防止某個類存在多個物件。 程式碼如下: **singlon.h:** #pragma once #ifndef _SINGLON_H #define _SINGLON_H class singlon { publ

模式懶漢式和式區別

單例模式 所謂單例模式,就是保證類在記憶體中只有一個物件 而如何保證類在記憶體中只有一個物件? 思考一下,我們平時在例項化類的物件時,基本都是通過new 的方式來例項化一個物件,其實說白了,就是呼叫了需要例項化類的預設的構造方法,所以為了保證類只有一個物件,我們需要將類

java常用的幾種模式懶漢式、式、登記式

簡單的講,單例模式就是確保某個類只有一個例項,而且自行例項化並向整個系統提供這個例項。 何時用到?執行緒池、快取、日誌物件、對話方塊、顯示卡驅動程式、印表機中都用到,spring中用的最多:Spring Context Factory用的是單例,bean預設都是

Java面試題之在多線程情況下,模式中懶漢會有什麽問題呢?

餓漢模式 問題 之間 static 代碼 clas ava public 餓漢 懶漢模式和餓漢模式: public class Demo { //private static Single single = new Single();//餓漢模式

Java程式設計原則以及設計模式懶漢

一:Java程式設計原則:單一職責原則:(SRP:Single responsibility principle)又稱單一功能原則,面向物件五個基本原則(SOLID)之一。它規定一個類應該只有一個發生變化的原因,就是指一個類或者模組應該有且只有一個改變的原因。       

C++的模式執行緒安全模式懶漢/

單例模式 單例模式:是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個例項。即一個類只有一個物件例項。   實現簡單的單例模式:建構函式宣告為private或protect防止被外部函式

模式---懶漢模式和靜態內部類實現

單例模式是最基本的 java 設計模式之一 主要有兩種設計方法,主要分為餓漢式與懶漢式 餓漢式比較簡單,直接使用常量即可,主要程式碼如下: private static final SingleModel INSTANCE = new Sing

模式——六種實現方式懶漢、雙重檢驗鎖、靜態內部類、列舉

單例模式 單例模式(Singleton Pattern)是 Java 中最簡單的設計模式之一。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。這種模式涉及到一個單一的類,該類負責建立自己的物件,同時確保只有單個物件被建立。這個類提供了一種訪問其唯一的物件的方式,可以直接訪問,不

c++ 實現順序棧初始化,入棧,退棧。讀棧頂元素以及順序輸出棧頂指標棧中的元素

/* 定義順序棧類(初始化,入棧,退棧。讀棧頂元素以及順序輸出棧頂指標與棧中的元素 */ #include<iostream> using namespace std; // template <class T> class sq_Stack {