问答题

[说明]
很多时候,希望某些类只有一个或有限的几个实例,典型解决方案是所谓单身(singleton)模式。但在多线程情况下,singleton模式有可能出现问题,需要进行同步检查。如果对“检查singleton对象是否已经创建”进行同步,则存在严重的瓶颈,所有的线程都必须等待检查对象是否存在。解决方式是一种称为Double-Checked-Locking模式,其意图是将非必须的锁定优化掉,同步检查最多只发生一次,因此不会成为瓶颈。以下是C++语言实现,能够正确编译通过。
[C++代码]
class USTax
______:
USTax( ) ; //构造函数
public:
static USTax* getInstance();
private:
static USTax* instance;
;
______ = NULL;
USTax* USTax∷getInstance()
if (instance == NULL)
//进行某种同步
cout<<"实例暂时不存在"<<endl;
if(______)
cout<<"实例不存在,创建实例... "<<endl;
instance = ______;
cout <<"实例创建成功 "<<endl;

else
cout <<"实例已被创建了"<<endl;


else
cout<<"实例已经存在" <<endl;

return ______;

【参考答案】

private
USTax*USTax∷instance
instance==NULL
new USTax
instance
热门 试题

问答题
[说明] 为网球比赛的选手安排比赛日程。设有n(n=2m)位选手参加网球循环赛,循环赛共进行n-1天,每位选手要与其他n-1位选手赛一场,且每位选于每天赛一场,不轮空。 设n位选手被顺序编号为1, 2, …, n,比赛的日程表是一个n行n-1列的表,第i行j列的内容是第i号选手第j天的比赛对手。用分治法设计日程表,就是从其中一半选手(2m-1位)的比赛日程导出全体2m选手的比赛日程。从众所周知的只有两位选手的比赛日程出发,反复这个过程,直至为n位选手安排好比赛日程为止。 如两位选手比赛日程表如下所示: 1 1 2 2 1 如四位选手比赛日程表如下所示: 1 2 3 1 2 3 4 2 1 4 3 3 4 1 2 4 3 2 1 函数中使用的预定义符号如下: #define M 64 int a[M+1][M]; [函数] void main() int twom1, twom, i, j, m, k; printf( 指定n(=2的k次幂)位选手, 请输入k: n ); scanf( *d , &k); *预设两位选手的比赛日程* a[l] [1] = 2; a[2] [1] = 1; m = 1; twoml = 1; while(______) m++; twoml += twoml; twom = twoml * 2; *为2^m位选手安排比赛日程* *填日程表的左下角* for(i = twoml + i; ______; i++) for(j = i; j <= twoml - i; j++) a[i] [j] = a[i - twoml] [j] + twoml; *填日程表的右上角* a[1] [twoml] = ______; *填日程表右上角的第1列* for(i = 2; i <= twoml; i++) a[i] [twoml] = a[i - 1] [twoml] + i; *填日程表右上角的其他列,参照前一列填当前列+ for(j = twoml + 1; j < twom; j++) for(i = i; i < twoml; i++) a[i] [j] = ______; a[twoml] [j] = a[l] [j - 1]; *填日程表的右下角* for(j = twoml; j < twom; j++) for(i = i; i <= twoml; i++) a[______] [j] = i; *输出日程表* for(i = i; i <= twom; i++) for(j = i; j < twom; j++) printf( %4d , a[i] [j]); printf( n ); printf( n );