Supporto del modello di threading Free nel provider
Tutte le classi dei provider OLE DB sono thread-safe e le voci del Registro di sistema vengono impostate di conseguenza. Per garantire prestazioni di livello superiore in situazioni multiutente, si consiglia di supportare il modello di threading Free. Per garantire che il provider rimanga thread-safe, è necessario verificare che il codice sia bloccato adeguatamente. Ogni volta che si scrivono o si memorizzano dati, è necessario bloccare l'accesso a sezioni critiche.
Ciascun modello provider OLE DB presenta una sezione critica. Per facilitarne il blocco, ogni nuova classe creata dovrà essere una classe modello che accetta come argomento il nome della classe padre.
Nell'esempio seguente viene illustrato come bloccare il codice:
template <class T>
class CMyObject<T> : public...
HRESULT MyObject::MyMethod(void)
{
T* pT = (T*)this; // this gets the parent class
// You don't need to do anything if you are only reading information
// If you want to write information, do the following:
pT->Lock(); // engages critical section in the object
...; // write whatever information you wish
pT->Unlock(); // disengages the critical section
}
Per ulteriori informazioni su come proteggere le sezioni critiche con Lock e Unlock, vedere Multithreading: utilizzo delle classi di sincronizzazione.
È inoltre necessario verificare che eventuali metodi di cui si esegue l'override, ad esempio Execute, siano thread-safe.