執行緒安全單例模式示例

2021-07-25 22:45:34 字數 1862 閱讀 5506

單例模式:確保乙個類只有乙個例項,且提供乙個全域性訪問點

sig.h

#include 

#include

using namespace std;

// 提前申請好資源,不會有競態

class mysgn

void say_hi()

protected: // 此處注意

mysgn() {}

private: // 此處注意

mysgn(const mysgn&);

mysgn& operator=(const mysgn&);

private:

static mysgn* _my_sgn;

};mysgn* mysgn::_my_sgn = new (std::nothrow) mysgn(); // 此處注意

// 延遲資源申請,double check + 鎖

class myfullsgn

pthread_mutex_unlock(&mutex);

}return _my_full_sgn;

}void say_hi()

protected: // 此處注意

myfullsgn() {}

private: // 此處注意

myfullsgn(const myfullsgn&);

myfullsgn& operator=(const myfullsgn&);

private:

static pthread_mutex_t mutex;

static myfullsgn* _my_full_sgn;

};pthread_mutex_t myfullsgn::mutex; // 此處注意

myfullsgn* myfullsgn::_my_full_sgn = null; // 此處注意

#include 

#include

using namespace std;

int main()

2017-08-09更新 增加mutex資源管理

#include 

#include

using namespace std;

class mutexlock

~mutexlock()

void

lock()

void unlock()

private:

pthread_mutex_t _mutex;

};class mutexlockguard

~mutexlockguard()

private:

mutexlock& _mutex_lock;

};class mysing

// unlock

}cout << "create done"

<< endl;

return _my_sing;

}void say_hi()

protected:

mysing() {}

private:

mysing(const mysing&);

mysing& operator=(const mysing&);

private:

static mutexlock _mutex_lock;

static mysing* _my_sing;

};mutexlock mysing::_mutex_lock;

mysing* mysing::_my_sing = null;

int main()

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

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

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

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

設計模式 單例模式(執行緒安全)

前言 單例模式是設計模式中比較簡單的一種,但是又因為簡單常見在面試中又是經常出現的乙個設計模式。所以必須要會啊。之前也只是會寫執行緒不安全的單例模式。單例模式 乙個類能返回物件乙個引用 永遠是同乙個 和乙個獲得該例項的方法 必須是靜態方法,通常使用getinstance這個名稱 當我們呼叫這個方法時...