49. if (instance == 0) {
50. Sleep(1000);
51. instance = new Singleton();
52. }
53.
54. return instance;
55.}
然后在主函数中创建两个线程,程序如下:
56.static Singleton * s1 = 0, * s2 = 0;
57.
58.DWORD WINAPI ThreadProc1(PVOID)
59.{
60. s1 = Singleton::Instance();
61.
62. return 0;
63.}
64.
65.DWORD WINAPI ThreadProc2(PVOID)
66.{
67. s2 = Singleton::Instance();
68.
69. return 0;
70.}
71.
72.int main(int argc, char* argv[])
73.{
74. DWORD threadID1;
75. DWORD threadID2;
76.
77. CreateThread(NULL, 0, ThreadProc1, NULL, 0, &threadID1);
78. CreateThread(NULL, 0, ThreadProc2, NULL, 0, &threadID2);
79.
80. Sleep(10000);
81.
82. std::cout << s1 << " " << s2;
83.
84. return 0;
85.}
这样修改后在运行程序,打印出来的s1和s2地址就不是同一个地址了。结果如下:
0372D68 00372E68Press any key to continue
可见当在多线程环境下使用这个Singleton就会出现创建不止一个实力的情况,所以我们需要给Singleton加锁。请看下面的代码。
C++ Singleton模式:
86.class Singleton
87.{
88.public:
89. static Singleton * Instance();
90. virtual ~Singleton();
91.
92.private:
相关报道:
- 《星球大战:前线》全新演示:刺激的步行者攻击模式2015-09-14
- 《星球大战:前线》新模式Blast:星战版团队死亡竞赛2015-07-31
- 芒果TV模式能否被传统电视台复制?2015-01-05
- Twitter并未衰亡 亟需开辟新模式拓展收入和用户2014-05-06
- 学习娱乐两不误 高性价比影音本推荐2014-03-17
本类最新
本类最热
科技视界
要闻推荐
今日视点
热点专题
新闻图片
- 新闻排行
- 评测排行