From 3a8d566bedf05fd9a4a5e117ab4a7495ef953d32 Mon Sep 17 00:00:00 2001 From: FengJungle Date: Sun, 20 Oct 2019 18:48:24 +0800 Subject: [PATCH] add Singleton Pattern --- 6.Singleton/1.Picture/单例模式UML图.png | Bin 0 -> 3195 bytes 6.Singleton/2.Code/Singleton.h | 33 ++++++++++++++++ 6.Singleton/2.Code/main.cpp | 50 ++++++++++++++++++++++++ 3 files changed, 83 insertions(+) create mode 100644 6.Singleton/1.Picture/单例模式UML图.png create mode 100644 6.Singleton/2.Code/Singleton.h create mode 100644 6.Singleton/2.Code/main.cpp diff --git a/6.Singleton/1.Picture/单例模式UML图.png b/6.Singleton/1.Picture/单例模式UML图.png new file mode 100644 index 0000000000000000000000000000000000000000..df48d4e5bc6e868469fdde3804753af8c7488bdc GIT binary patch literal 3195 zcmeH~`9IWa8^?#kIYfve3N0w9v6m?Onk`$FV-TYuJNYuB!8oXpEt(j+Q#iv2V;v+8 zVlafpEL5_@ES8Rad#0bx^DjKF*Ym@5-}m)--9KH|`*XeS``KL^v*X94j)6d+;}+(| z_8<_KEazOz$IV%7*Y5zFjVr?5%n*bdIlIJ3cwh$B1|U#fhQR)PUQW&*YVH~V0txl} z46go=N+<{+tb0#c!Bb^I>y(pTw)lz4gP|{!Z9#% zDCWW_`1GzT_c+c~WgIN`z$K8%YZSt*9(8_+(f?E0x{p+t@B6g`cRXgX=&Dk z%zyGYvEefgM)nOs%=?5NT>891ib(&Z8#3y1J@T z5mXA1kdVm8$cT6uUuW(m!+m4^y6x37Nx-lLrY@7mPa<2_XVE$yn4j*fmd*yT3_rq{ z?fj#-b{e|TNc1N#X@xhqsJT&l^?*6|&tla5P|zo=2YY@JvWN%HFR24FJbunIEF$$h z|0q}v**Ag#u?7i9R~nX(;23k^^9pUc6c~F0?C!>{za7@(bFHUOaj|Z?3Rb#piW{Nt_4?^ zv$VHhd?wyYxrFX^vejLDgmVlyyEPz8>avs8JwgJ1&%$DD5g=)#U9n0?ezuXma9U5E zdREG#FfvUvkC4*_o2__0fm`nrRIRnURQy0AD)#7i`f!-X=cyAzT0H8>>!C3XPYQJW zA63sphCJ;^OksOus~~2P3BAQB`Z<8LUF&Azt+=lI1SOJcy#5y#~UV92j^gZLK5Tt4gEMh8KWHg5scNdm@I`+$&jD zby7f$<3Hm5jBh_m&67p=q&-vT&ysRk*|=lZ+m|vs>0(e_LZZHQOGO#C?y2+W#_n&= z_6kHG=lf8|1(h_Pqa2L1su0zxMKA79W38+&3rn^co_OX^U8~-($zKhHZ1q-Iy`UJ zGqu}gD3d+6E$ejsb3F%-Qv716HysU?jUDX6M3vngN_S(rC(Ca^J+JwJ65>19+RWG zZik2hG=chcF3J5xf4*|6p&dWhSk37MxpRwx#bL~CVvSeV&1VocmijuUjX;*3c=y!b zTE!9aQNCz3l-!7!xsYu(ol1iY6h*E0GkCu5&xAOeY1yR$-tMWACq~jsD?fwhsRsX}^ms{OgAqZOI*63oBkzV!2f_6&m!@SV0j)CdoyD76GjsbA6!$ zTL(oHOhKy?*%&%sQ zctCYk04e5=0{M%C{IR0w>gLB*Df^g@*hZLhuI#eI<=dw|DOpiENpzKYnHo`+R1+NG zH)xmLK&)BFCjF*HTJndU_`HGp(PoQz;>l0YMx!(>e9J1jn*_eGmqQSvMZR9Dxcio^ zG?L@y95dWKfq_#H&;WK6+F<+yGpQSv`STr{8v#ePK^kuNmWc`<5H{~m%88rBw^M<9q#+z>3YsnFZXsj7={iYPie*l fn#!Tt`S*o2cva`7J~PER9|n+xiH$MN&@16Ti~xsa literal 0 HcmV?d00001 diff --git a/6.Singleton/2.Code/Singleton.h b/6.Singleton/2.Code/Singleton.h new file mode 100644 index 0000000..3ff8a6a --- /dev/null +++ b/6.Singleton/2.Code/Singleton.h @@ -0,0 +1,33 @@ +#ifndef __SINGLETON_H__ +#define __SINGLETON_H__ + +#include +#include +#include +using namespace std; + +class Singleton +{ +public: + static Singleton* getInstance(){ + if (instance == NULL){ + m_mutex.lock(); + if (instance == NULL){ + printf("µʵ\n"); + instance = new Singleton(); + } + m_mutex.unlock(); + } + return instance; + } +private: + Singleton(){} + + static Singleton* instance; + static std::mutex m_mutex; +}; + +Singleton* Singleton::instance = NULL; +std::mutex Singleton::m_mutex; + +#endif //__SINGLETON_H__ \ No newline at end of file diff --git a/6.Singleton/2.Code/main.cpp b/6.Singleton/2.Code/main.cpp new file mode 100644 index 0000000..bee839c --- /dev/null +++ b/6.Singleton/2.Code/main.cpp @@ -0,0 +1,50 @@ +#include +#include "Singleton.h" + +/*ģʽʵ*/ +/* +int main() +{ + Singleton *s1 = Singleton::getInstance(); + Singleton *s2 = Singleton::getInstance(); + + system("pause"); + return 0; +} +*/ + +/*̰߳ȫ ģʽ*/ +#include +#include + +//̣߳߳Ŀ5 +#define THREAD_NUM 5 + +unsigned int __stdcall CallSingleton(void *pPM) +{ + Singleton *s = Singleton::getInstance(); + int nThreadNum = *(int *)pPM; + Sleep(50); + //printf("̱߳Ϊ%d\n", nThreadNum); + return 0; +} + + +int main() +{ + HANDLE handle[THREAD_NUM]; + + //̱߳ + int threadNum = 0; + while (threadNum < THREAD_NUM) + { + handle[threadNum] = (HANDLE)_beginthreadex(NULL, 0, CallSingleton, &threadNum, 0, NULL); + //߳̽յʱܸ߳̿ıiֵ + threadNum++; + } + //֤߳ȫн + WaitForMultipleObjects(THREAD_NUM, handle, TRUE, INFINITE); + + system("pause"); + return 0; +} \ No newline at end of file