list<int> l;
class monitor{
public:
void m_add(int x){
//lock use of m_remove
//lock use of m_add
l.push_back(x);
//unlock use of m_add
//unlock use of m_remove
}
void m_remove(int x){
//lock use of m_remove
//lock use of m_contains
//lock use of m_add
l.remove(x);
//unlock use of m_add
//unlock use of m_contains
//unlock use of m_remove
}
bool m_contains(int x){
//lock use of m_remove
bool found = find(l.begin(), l.end(), x) != l.end();
//unlock use of m_remove
return found;
}
private:
mutex mtx_remove;
mutex mtx_add;
mutex mtx_contains;
};