ICLRTestHookManager* CLRTestHookManager::Start() { LIMITED_METHOD_CONTRACT; if (g_pManager==NULL) { CLRTestHookManager* newman=new (nothrow)CLRTestHookManager(); if (newman!=NULL && FastInterlockCompareExchangePointer(&g_pManager, newman, 0)!=0) delete newman; } if(g_pManager) g_pManager->AddRef(); return g_pManager; }
CharacterInfoTable* CharacterInfoTable::CreateInstance() { if (m_pDefaultInstance != NULL) { return (m_pDefaultInstance); } CharacterInfoTable *pCharacterInfoTable = new CharacterInfoTable(); // Check if m_pDefaultInstance has been set by another thread before the current thread. PVOID result = FastInterlockCompareExchangePointer((LPVOID*)&m_pDefaultInstance, (LPVOID)pCharacterInfoTable, (LPVOID)NULL); if (result != NULL) { // someone got here first. delete pCharacterInfoTable; } return (m_pDefaultInstance); }