首页 > 应用软件 > 软件教程 > 编程开发 > 正文

Java认证考试:关于Singleton模式的学习(2)
2011-06-20 15:33      我要评论()
字号:T|T

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:

 

新闻热线:010-68947455

关键词: 认证考试 模式 学习

责任编辑:lujq

我要评论

已有位网友参与评论

本类最热

科技视界

网站地图

牛华网

华军下载 | 牛华网 | 盒子 | pcsoft | 论坛

实用工具

关于我们 | 新闻投稿 | 软件发布 | 版权声明 | 意见建议 | 网站地图 | 友情连接 | RSS订阅 | 总编信箱 | 诚聘英才 | 联系我们

苏ICP备11016551号-2  苏公网安备 32132202000111号 本站特聘法律顾问:于国富律师

Copyright (C) 1997-2012 newhua.com 牛华网 版权所有