thread_specific_ptr代表了一個全局的變量,而在每個線程中都各自new一個線程本地的對象交給它進行管理。
線程之間就不會因為訪問同一全局對象而引起資源競爭導致性能下降。
而線程結束時,這個資源會被自動釋放。
#include <boost/thread/thread.hpp> #include <boost/thread/mutex.hpp> #include <boost/thread/tss.hpp> #include <iostream> boost::mutex io_mutex; boost::thread_specific_ptr<int> ptr; struct stcount { stcount(int id) : id(id) { } void operator()() { if (ptr.get() == 0) ptr.reset(new int(0)); for (int i = 0; i < 10; ++i) { (*ptr)++; boost::mutex::scoped_lock lock(io_mutex); std::cout << id << ": " << *ptr << std::endl; } } int id; }; int _tmain(int argc, _TCHAR* argv[]) { boost::thread thrd1(stcount(1)); boost::thread thrd2(stcount(2)); thrd1.join(); thrd2.join(); while (1); return 0; }