Dando suporte ao thread livre no provedor
Todas as classes de provedor OLE DB são seguras, threads e entradas do Registro são definidas adequadamente. É uma boa ideia dar suporte à threading livre para ajudar a fornecer um nível alto de desempenho em situações multiusuários. Para ajudar a manter seu provedor isento, você deve verificar se seu código está bloqueado corretamente. Sempre que você escreve ou armazena dados, você deve bloquear o acesso com seções críticos.
Cada objeto de modelo do provedor OLE DB tem sua própria seção crítica. Para fazer bloquear mais fácil, cada nova classe que você cria deve ser uma classe do modelo que possui o nome da classe pai como um argumento.
O exemplo a seguir mostra como bloquear seu código:
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
}
Para obter mais informações sobre como proteger seções críticos com Lock e Unlock, consulte Multithreading: Como usar as classes de sincronização.
Você também deve verificar se todos os métodos que você substituir (como Execute) é thread-safe.