#include // tss -> tls: thread local storage #include #include boost::mutex mutex; void init() { static boost::thread_specific_ptr tls; if (!tls.get()) { tls.reset(new bool(true)); boost::lock_guard lock(mutex); std::cout << "done" << '\n'; } else if (*tls) { *tls = false; boost::lock_guard lock(mutex); std::cout << "set to false" << '\n'; } } void task() { init(); init(); // again ... } int main() { boost::thread t[3]; for (int i = 0; i < 3; ++i) { t[i] = boost::thread(task); } for (int i = 0; i < 3; ++i) { t[i].join(); } }