问题 填空题

阅读以下说明和c++代码,将应填入 (n) 处的字句写在答题纸对应栏内。

[说明]

很多时候,希望某些类只有一个或有限的几个实例,典型解决方案是所谓单身(Singleton)模式。但在多线程情况下,Singleton模式有可能出现问题,需要进行同步检查。如果对“检查Singleton对象是否已经创建”进行同步,则存在严重的瓶颈,所有的线程都必须等待检查对象是否存在。解决方式是一种称为Double-Checked-Locking模式,其意图是将非必须的锁定优化掉,同步检查最多只发生一次,因此不会成为瓶颈。以下是c++语言实现,能够正确编译通过。

[C++代码]

class USTax

(1) :

USTax();//构造函数

public:

static USTax* getInstance();

private:

static USTax*instance;

;

(2) =NULL;

USTax*USTax::get Instance()

if(instance==NULL)

//进行某种同步

cout<<"实例暂时不存在"< if( (3) )

cout<<"实例不存在,创建实例..."< instance= (4) ;

cout<<"实例创建成功"<

else

cout<<"实例已被创建了"<

else

cout<<"实例已经存在"<

return (5) ;

 

(3)处填()。

答案

参考答案:instance==NULL

解析:

[分析]: 在此是Double-Checked-Locking模式,即双检查锁定模式,因此此处应该再次检查。也可以想象多线程的执行情况,线程A和线程B同时调用getlnstance()方法。故空(3)应填instance==NULL。

填空题
多项选择题