Example #1
0
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;
}
Example #2
0
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);
}