// Copyright (C) 2001-2003 // William E. Kempf // // Permission to use, copy, modify, distribute and sell this software // and its documentation for any purpose is hereby granted without fee, // provided that the above copyright notice appear in all copies and // that both that copyright notice and this permission notice appear // in supporting documentation. William E. Kempf makes no representations // about the suitability of this software for any purpose. // It is provided "as is" without express or implied warranty. #include #include #include #include #include "util.inl" boost::mutex tss_mutex; int tss_instances = 0; struct tss_value_t { tss_value_t() { boost::mutex::scoped_lock lock(tss_mutex); ++tss_instances; value = 0; } ~tss_value_t() { boost::mutex::scoped_lock lock(tss_mutex); --tss_instances; } int value; }; boost::thread_specific_ptr tss_value; void test_tss_thread() { tss_value.reset(new tss_value_t()); for (int i=0; i<1000; ++i) { int& n = tss_value->value; BOOST_CHECK_EQUAL(n, i); ++n; } } void do_test_tss() { const int NUMTHREADS=5; boost::thread_group threads; for (int i=0; iadd(BOOST_TEST_CASE(test_tss)); return test; }