
I currently have a shared boost::uuids::basic_uuid_generator<boost::mt19937> which I protect by a boost::mutex when I generate a new uuid. The code looks something like: std::wstring GetUniqueName() { boost::uuids::uuid uniqueId; { boost::mutex::scoped_lock lock( my_mutex ); uniqueId = my_generator(); } return boost::lexical_cast<std::wstring>( uniqueId ); } For one thing this is yet another case where I used a default constructor on a uuid during natural coding and expected it to be cheap but I digress. Do I have to protect the shared generator with a mutex? Should I even be using a shared generator or should I be constructing it on the stack in this function? I don't expect this to be called very often (twice total in our current application) but I want to make sure it is bullet proof since it can potentially be called concurrently. -- Michael Marcin