thread-safe singleton implementation# Programming - 葵花宝典
EM
1 楼
初学multi-thread,问题比较低级,见笑了,代码如下
class A {
public:
A *factory() {
if(a) return a;
EnterCriticalSection(L);
if(!*const_cast(&a)) {
EnterCriticalSection(M);
A *tempA = new A();
LeaveCriticalSection(M);
a = tempA;
}
LeaveCriticalSection(L);
return a;
}
...
};
我的问题就是为什么在if里面也加锁M呢,为什么不是直接把这段
EnterCriticalSection(M);
A *tempA = new A();
LeaveCriticalSection(M);
a = tempA;
换成
a = new A();
class A {
public:
A *factory() {
if(a) return a;
EnterCriticalSection(L);
if(!*const_cast(&a)) {
EnterCriticalSection(M);
A *tempA = new A();
LeaveCriticalSection(M);
a = tempA;
}
LeaveCriticalSection(L);
return a;
}
...
};
我的问题就是为什么在if里面也加锁M呢,为什么不是直接把这段
EnterCriticalSection(M);
A *tempA = new A();
LeaveCriticalSection(M);
a = tempA;
换成
a = new A();