yigal_s: (Default)
[personal profile] yigal_s
вот мелочь вроде, а приятно.

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());