вот мелочь вроде, а приятно.
хотя можно и так (далее будет понятно, почему)
Где это может применяться? Ну, для начала, мютекс ложится на этот интерфейс напрямую.
А вот так ложится на этот интерфейс read-write lock:
обратите внимание, эти функции ничего не локают, а только лишь возвращают интерфейс.
мелочь, а приятно, поскольку позволяет использовать один и тот же guard класс для локировки чего угодно:
interface ILockable
{
void lock();
void unlock();
}хотя можно и так (далее будет понятно, почему)
interface IEnterable
{
void enter();
void leave();
}Где это может применяться? Ну, для начала, мютекс ложится на этот интерфейс напрямую.
А вот так ложится на этот интерфейс read-write lock:
class RWLock
{
ILockable& readLock();
ILockable& writeLock();
}обратите внимание, эти функции ничего не локают, а только лишь возвращают интерфейс.
мелочь, а приятно, поскольку позволяет использовать один и тот же guard класс для локировки чего угодно:
Guard g1(mutex); Guard g2(rwlock.readLock()); Guard g3(rwlock.writeLock());