#include #include #include #include using namespace std; class Test { public: static Test *Instance(); virtual ~Test(); private: Test(); static Test *instance; static boost::shared_mutex instanceMutex; }; Test *Test::instance = NULL; boost::shared_mutex Test::instanceMutex; Test::Test() { }; Test *Test::Instance() { boost::upgrade_lock lock(instanceMutex); if (!instance) { boost::upgrade_to_unique_lock uniqueLock(lock); instance = new Test(); } return instance; }; Test::~Test() { boost::upgrade_lock lock(instanceMutex); if (instance) { boost::upgrade_to_unique_lock uniqueLock(lock); instance = NULL; } }; int main() { Test *i = Test::Instance(); delete i; return(0); }