Hi, Im trying to make a thread safe Copy-on-write class, but i am unsure how. I want a template class that stores a std::set<T> and i want to be able to add/remove elements while using iterators at the same time without conflicts. I would like to avoid making copies of the entire set each time i want to iterate over the elements. I have tried to use shared_ptr.unique() to decide when to create a new copy of the set but i have been unsuccessful since shared_ptr.use_count() stays at the value 1. I am doing something wrong. I have tried to use something like this as my add function: mutable boost::mutex _mutex; typedef std::set<T> Set; typedef boost::shared_ptr<Set> SetPtr; void add(T element) { boost::unique_lockboost::mutex lock(_mutex); if (!(_mySet.unique() || _mySet == 0)) { Set* tmp = _mySet.get(); _mySet = SetPtr(new Set(*tmp)); } _mySet->insert(element); } My thought was that each time an iterator accesses the set the count would increase. Could i make it so (should i)? Any other ideas about a thread safe implementation of a set of elements? I hope someone can help me. Thanks.