书里提供的一段Double-Checked Locking Pattern的示例代码,我觉得是错误的。大家帮忙看看

老毕 2006-08-03 09:40:17
最近我在阅读一本关于Design Pattern的英文书。在介绍由Singleton pattern变形获得的Double-Checked Locking Pattern时,书中提供了如下的C++代码:
-------------------------
这是Singleton的示例:
-------------------------
Class USTax
{
public:
static USTax* getlnstance();

private:
USTax();
static USTax* instance;
}

USTax::USTax ()
{
instance = 0;
}

USTax* USTax::getlnstance ()
{
if (instance == 0)
instance = new USTax;
return instance;
}

-------------------------------------------------
这是Double-Checked Locking Pattern的示例:
-------------------------------------------------
class USTax : public CalcTax
{
public:
static USTax* getlnstance();

private:
USTax();
static USTax* instance;
};

USTax::USTax ()
{
instance = 0;
}

USTax* USTax::getlnstance ()
{
if (instance == 0)
{
// do sync here

if (instance == 0)
{
}
}

return instance;
}

---------------------------
我的问题:
---------------------------
1. 上面的两段示例代码中USTax()的Constructor是不是没有意义的?是否应修改为对类的private static成员instance的初始化?即:

USTax* USTax::instance == 0;

2. 在DCLP的getInstance()方法中,第二个if语句是否应该修改为:

if (instance == null)
instance = new USTax;

--------------------------
相关说明:
--------------------------
在网上找了许多关于DCLP的文章,大多是Java的,文中均提到在Java中若按如上方式实现是不能真正实现线程安全的。而仅有的几篇由C++实现的文章却没有太多的讨论。
...全文
236 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wshjobless 2006-08-08
  • 打赏
  • 举报
回复
你说1是对的
你说的2是可以的,
建议你参考<<Head.First.Design.Patterns>>
VeryCD.com上有下载
wshjobless 2006-08-08
  • 打赏
  • 举报
回复
你说的1中"USTax()的Constructor"不仅是没意义,还是错误的

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧