w*******e 发帖数: 285 | 1 【 以下文字转载自 JobHunting 讨论区 】
发信人: windforce (大怪兽), 信区: JobHunting
标 题: 请问关于c++实现singleton的问题?
发信站: BBS 未名空间站 (Sun Nov 16 06:56:48 2008), 转信
我觉得目标和方法是不是差不多这样?
public static的getinstance function返回唯一的instance。
declare private的ctor,copy ctor和copy assignment防止私自创建和copy。
只在第一次调用getinstance的时候才创建对象,所谓的laziness。
在创建instance的时候用mutex同步,但是以后就不用同步提高效率。
我写了一个如下,我觉得运行起来还可以,大家看看有什么问题吗?
class Singleton
{ public:
static Singleton* GetInstance();
~Singleton() {cout << "Dtor"<< endl;};
vo |
E*****7 发帖数: 128 | |
Q**g 发帖数: 183 | 3 Actually, neither implementation is thread-safe
http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf
http://blogs.msdn.com/oldnewthing/archive/2004/03/08/85901.aspx
【在 w*******e 的大作中提到】 : 【 以下文字转载自 JobHunting 讨论区 】 : 发信人: windforce (大怪兽), 信区: JobHunting : 标 题: 请问关于c++实现singleton的问题? : 发信站: BBS 未名空间站 (Sun Nov 16 06:56:48 2008), 转信 : 我觉得目标和方法是不是差不多这样? : public static的getinstance function返回唯一的instance。 : declare private的ctor,copy ctor和copy assignment防止私自创建和copy。 : 只在第一次调用getinstance的时候才创建对象,所谓的laziness。 : 在创建instance的时候用mutex同步,但是以后就不用同步提高效率。 : 我写了一个如下,我觉得运行起来还可以,大家看看有什么问题吗?
|
E*****7 发帖数: 128 | 4 Good doc to read. Thank Qing for sharing them with us.
【在 Q**g 的大作中提到】 : Actually, neither implementation is thread-safe : http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf : http://blogs.msdn.com/oldnewthing/archive/2004/03/08/85901.aspx
|
w*******e 发帖数: 285 | 5
谢谢指导,看完这两篇文章清楚多了,尤其是第一个pdf文件。
不过普通的VC和GCC的编译器会是怎么样的呢?是像文章里说的那样吗?
还有第二个link里面说到的scoped static init不safe,但是我发现在vc和gcc下面,
如果
某个初始化函数像那个ComputeSomethingSlowly()一样非常慢。那么其他的thread都会
在不进入这个函数的同时被lock住,然后等第一个thread执行完
ComputeSomethingSlowly()再进一步。这个是不是并不是标准C++保证的,但是每个编
译器基本上都这么做?
【在 Q**g 的大作中提到】 : Actually, neither implementation is thread-safe : http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf : http://blogs.msdn.com/oldnewthing/archive/2004/03/08/85901.aspx
|
h*********y 发帖数: 1080 | |