阅读以下说明和C++代码,将应填入(n)处的字句写在答题纸对应栏内。 【说明】 很多时候,希望某些类只有一个或有限的几个实例,典型解决方案是所谓单身(Singleton)模式。但在多线程情况下,Singleton模式有可能出现问题,需要进行同步检查。如果对

admin2014-10-11  33

问题 阅读以下说明和C++代码,将应填入(n)处的字句写在答题纸对应栏内。
【说明】
很多时候,希望某些类只有一个或有限的几个实例,典型解决方案是所谓单身(Singleton)模式。但在多线程情况下,Singleton模式有可能出现问题,需要进行同步检查。如果对“检查Singleton对象是否已经创建”进行同步,则存在严重的瓶颈,所有的线程都必须等待检查对象是否存在。解决方式是一种称为Double—Checked-Locking模式,其意图是将非必须的锁定优化掉,同步检查最多只发生一次,因此不会成为瓶颈。以下是C++语言实现,能够正确编译通过。
【C++代码】
C1aSS USTax{
(1):
USTax()();//构造函数
public:
StatiC USTax。getInstance();
private:
qtatjc USTax*inStance: ;
(2)=NULL;
    USTax*  USTax::get工nstance(){
    if(instance==NULL){
    //进行某种同步
    cout<<“实例暂时不存在”<    if((3)  ){
    cout<<“实例不存在,创建实例...”<    instance=(4);
    cout<<“实例创建成功”<    }
    else{
    cout<<“实例已被创建了”<    }
    }
    e1se{
    cout<<“实例已经存在”<    }
    return(5);
    }

选项

答案(1)private (2)USTax*USTax::instance (3)instance==NULL (4)new USTax (5)instance

解析 在这里希望USTax类只有一个实例,从而需要将其构造函数设置为private,以防止外部对这个类进行直接实例化。故空(1)应填private。空(2)是对类USTax的静态成员变量instance的初始化,应填USTax*USTax::instance。在此足Double—Checked—Locking模式,即双检查锁定模式,因此此处应该再次检查。也可以想象多线程的执行情况,线程A和线程B同时调用getInstance()方法。故空(3)应填instance==NULL。
空(4)是创建一个USTax实例,应填new USTax。
空(5)返回引用,应填instance。
转载请注明原文地址:https://kaotiyun.com/show/gaDZ777K
0

相关试题推荐
最新回复(0)