банальности OOD: объектно-ориентированная локировка вот мелочь вроде, а приятно.
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());