@ DrPizza:
Это интересный момент, который у вас есть. Обратите внимание, что в некоторых ситуациях идиома RAII не обязательно является необязательной.
В любом случае, возможно, лучший способ решить вашу дилемму - добавить параметр в конструктор блокировки, который указывает, нужна ли блокировка. Например:
class optional_lock
{
mutex& m;
bool dolock;
public:
optional_lock(mutex& m_, bool dolock_)
: m(m_)
, dolock(dolock_)
{
if (dolock) m.lock();
}
~optional_lock()
{
if (dolock) m.unlock();
}
};
Тогда вы могли бы написать:
optional_lock l(mtx, needs_lock);
render();