2016-06-22 66 views
1

Visual Studio 2015编译器是否插入了双重检查锁定?双重检查锁定和单例模式

我想让我的Singleton(GOF)模式线程安全(无锁)。

Singleton& Singleton::getInstance() { 
    static Singleton instance; 
    return instance; 
} 

是否有可能生成汇编代码并检查?

回答

2

您可以在Debug-> Windows-> Disassembly中访问反汇编。

对于类:

class S 
{ 
public: 
    static S& getInstance() 
    { 
     static S instance; 
     return instance; 
    } 
}; 

你得到拆卸:

47: 
48: class S 
49: { 
50: public: 
51:  static S& getInstance() 
52:  { 
push  ebp 
mov   ebp,esp 
sub   esp,0C0h 
push  ebx 
push  esi 
push  edi 
lea   edi,[ebp-0C0h] 
mov   ecx,30h 
mov   eax,0CCCCCCCCh 
rep stos dword ptr es:[edi] 
53:   static S instance; 
54:   return instance; 
mov   eax,offset instance (0D9471h) 
55:  } 
pop   edi 
pop   esi 
pop   ebx 
mov   esp,ebp 
pop   ebp 
ret 
+0

这是否意味着静态初始化通过写释放把守? – Damian

+1

我做了一些Google搜索,发现[this](http://anotherlayer.net/2012/05/04/static-initialization-and-thread-safety/)。静态应该是线程安全的启动C++ 11 – MaciekGrynda

相关问题