, , : , , , , , , . , RAII.
locked ( ) , .
struct mutex {
void lock() { }
void unlock() { }
};
struct lock {
lock(mutex &m) { m.lock(); }
~lock(mutex &m) { m.unlock(); }
};
template <class container>
class locked {
typedef container::value_type value_type;
typedef container::reference_type reference_type;
container c;
mutex m;
public:
void push_back(reference_type const t) {
lock l(m);
c.push_back(t);
}
void push_front(reference_type const t) {
lock l(m);
c.push_front(t);
}
};
( ) - - , :
std::vector<int> x;
x.push_back(y);
... :
locked<std::vector<int> > x;
x.push_back(y);
, begin(), end(), push_front, push_back .., locked<container> - , , , ...