免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: scuwb
打印 上一主题 下一主题

设计模式之Singleton [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-10-28 22:21 |只看该作者

回复 #5 scuwb 的帖子

期待着  呵呵

论坛徽章:
0
12 [报告]
发表于 2008-10-28 22:23 |只看该作者
原帖由 scutan 于 2008-10-28 22:14 发表

使用Singleton模式有一个必要条件:在一个系统要求一个类只有一个实例时才应当使用单例模式。反过来,如果一个类可以有几个实例共存,就不要使用单例模式。

也是有线程安全需求的(如果多线程的话),如果感兴趣看MCP里的讨论

论坛徽章:
0
13 [报告]
发表于 2008-10-28 22:29 |只看该作者
原帖由 tyc611 于 2008-10-28 22:23 发表

也是有线程安全需求的(如果多线程的话),如果感兴趣看MCP里的讨论


嗯. 我之前想错了.

C++我还菜, 学习中!

论坛徽章:
0
14 [报告]
发表于 2008-10-28 22:34 |只看该作者
想太复杂了, Singleton就是静态方法的一个特殊应用, 熟悉了静态方法, 灵活的应用的地方可不止singleton

论坛徽章:
0
15 [报告]
发表于 2008-10-28 22:35 |只看该作者
原帖由 blizzard213 于 2008-10-28 22:10 发表

if (NULL == _instance)
        {
            _instance = new Singleton();
        }
线程不安全代码


直接说这样先是线程不安全代码未免太绝对了吧,要看这个类在什么地方被初始化了.在进入线程函数前初始化该类对象就不会有这样的问题了

论坛徽章:
0
16 [报告]
发表于 2008-10-28 22:36 |只看该作者

回复 #9 blizzard213 的帖子

的确是存在这种问题,我这里写的代码都是非常简单的,应付一般笔试,面试应该问题不大,但是如果对单一问题进行深入讨论就会发现上面的代码有很多问题.
其中之一就是:线程不安全我们来看C++代码
当两个进程同时执行Singleton::Instance()->method1();的时候如果_instance还没有实例化,那么两个线程同时执行
if (NULL == _instance) 的判断语句,两个线程执行的if语句的结果都会是一样的,这样两个线程都各自实例化了一个Singleton对象,这样系统中就不止有一个Singleton对象了,这就违背了Singleton模式的初衷....

论坛徽章:
0
17 [报告]
发表于 2008-10-28 22:38 |只看该作者

回复 #7 tyc611 的帖子

请问有电子版的没有? share 一下~~

论坛徽章:
0
18 [报告]
发表于 2008-10-28 22:55 |只看该作者
原帖由 scuwb 于 2008-10-28 22:38 发表
请问有电子版的没有? share 一下~~

ebook只有英文的

Modern C++ Design Generic Programming and Design Patterns Applied.pdf

2.12 MB, 下载次数: 51

论坛徽章:
0
19 [报告]
发表于 2008-10-28 22:56 |只看该作者
原帖由 scutan 于 2008-10-28 22:29 发表


嗯. 我之前想错了.

C++我还菜, 学习中!

C++还是比较重要,校园招聘都喜欢考这个

论坛徽章:
0
20 [报告]
发表于 2008-10-28 22:57 |只看该作者

回复 #18 tyc611 的帖子

非常感谢~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP