template<class T, class Lock = NoLock> class Array
{
Lock lock;
public:
void push_back(const T& v)
{
lock.Lock();
// ...
lock.Unlock();
}
}
class MutexLock
{
public:
inline void Lock() { cout << "Mutex Lock" << endl; }
inline void Unlock() { cout << "Mutex Unlock" << endl; }
}
class NoLock
{
public:
inline void Lock() {}
inline void UnLock() {}
}