boost::thread_specific_ptr


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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM