Поделиться через


Поддержка свободной потоковой модели в поставщике

Все классы поставщика 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) являются потокобезопасными.

См. также

Основные понятия

Работа с шаблонами поставщика OLE DB