Поддержка свободной потоковой модели в поставщике
Все классы поставщика OLE DB являются потокобезопасными, и записи реестра имеют соответствующие значения.Поддержка свободной потоковой модели помогает обеспечивать высокий уровень производительности в многопользовательских ситуациях.Чтобы помочь сохранить потокобезопасность поставщика, необходимо убедиться, что код заблокирован соответствующим образом.Независимо от того, записываются или сохраняются данные, необходимо заблокировать доступ к критическим секциям.
Каждый поставщик OLE DB шаблона объекта имеет собственную критическую секцию.Чтобы облегчить блокирование, каждый новый создаваемый класс должен быть классом-шаблоном, который получает имя родительского класса в качестве аргумента.
В следующем примере кода показано, как заблокировать созданный код:
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
}
Дополнительные сведения о том, как защитить критические секции с помощью Lock и Unlock см. в разделе Многопоточность. Практическое руководство по использованию классов синхронизации.
Помимо этого, необходимо убедиться, что все переопределяемые методы (например Execute) являются потокобезопасными.