Мне нужно использовать библиотеку, которая делает вызовы базы данных не поточнобезопасными.Также мне иногда приходится загружать большие объемы данных в фоновом потоке.
Трудно сказать, какие библиотечные функции на самом деле обращаются к БД, поэтому я считаю, что самый безопасный для меня подход - это защитить каждый вызов библиотеки с помощью блокировки.
Допустим, у меня есть объект библиотеки:
dbLib::SomeObject someObject;
Прямо сейчас я могу сделать что-то вроде этого:
dbLib::ErrorCode errorCode = 0;
std::list<dbLib::Item> items;
{
DbLock dbLock;
errorCode = someObject.someFunction(&items);
} // dbLock goes out of scope
Я хотел бы упростить это до чего-то вроде этого(или даже проще):
dbLib::ErrorCode errorCode =
protectedCall(someObject, &dbLib::SomeObject::someFunction(&items));
Основным преимуществом этого будет то, что мне не придется дублировать интерфейс dbLib::SomeObject
, чтобы защитить каждый вызов с помощью блокировки.
Я почти уверен, что это распространенный шаблон / идиома, но я не знаю его названия или ключевых слов для поиска.(Глядя на http://www.vincehuston.org/dp/gof_intents.html Я думаю, это скорее идиома, чем шаблон).
Где мне искать дополнительную информацию?