boost之对象池使用实例
生活随笔
收集整理的這篇文章主要介紹了
boost之对象池使用实例
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
這個主要用在http使用tcp支持短連接的情況,能快速獲取連接對象而不用反復(fù)申請釋放資源
#ifndef OBJECT_POOL_H #define OBJECT_POOL_H#include "boost_comm.h"#include "message_header.h" #include "tcp_client.h"namespace seemmo {//template<object_type>class object_pool{public:object_pool();~object_pool();protected:static object_pool *instance(){static object_pool inst;return &inst;} private:boost::mutex mtx2_;public:static boost::mutex * alloc_mutex();static void free_mutex(boost::mutex *src);private:boost::mutex mtx3_;public:static tcp_client* alloc_client();static void free_client(tcp_client *src);private:boost::mutex mtx4_;public:static result_data * alloc_data(string cardid, float score, string params[]);static void free_data(result_data *src);private:boost::mutex mtx5_;public:static ret_result *alloc_result(std::string code, std::string msg, int n = 100);static void free_result(ret_result *src);protected:boost::object_pool<boost::mutex> mtx_obp_;boost::object_pool<tcp_client> obp_client_;boost::object_pool<result_data> obp_data_;boost::object_pool<ret_result> obp_result_;private:}; }#endif // OBJECT_POOL_H#include "object_pool.h"namespace seemmo {object_pool::object_pool(){}object_pool::~object_pool(){}boost::mutex * object_pool::alloc_mutex(){boost::unique_lock<boost::mutex> wlock(instance()->mtx2_);return instance()->mtx_obp_.construct();}void object_pool::free_mutex(boost::mutex *src){boost::unique_lock<boost::mutex> wlock(instance()->mtx2_);instance()->mtx_obp_.destroy(src);}tcp_client* object_pool::alloc_client(){boost::unique_lock<boost::mutex> wlock(instance()->mtx3_);return instance()->obp_client_.construct();}void object_pool::free_client(tcp_client *src){boost::unique_lock<boost::mutex> wlock(instance()->mtx3_);instance()->obp_client_.destroy(src);}result_data * object_pool::alloc_data(string cardid, float score, string params[]){boost::unique_lock<boost::mutex> wlock(instance()->mtx4_);return instance()->obp_data_.construct(cardid, score, params);}void object_pool::free_data(result_data *src){boost::unique_lock<boost::mutex> wlock(instance()->mtx4_);instance()->obp_data_.destroy(src);}ret_result *object_pool::alloc_result(std::string code, std::string msg, int n /* = 100 */){boost::unique_lock<boost::mutex> wlock(instance()->mtx5_);return instance()->obp_result_.construct(code, msg, n);}void object_pool::free_result(ret_result *src){boost::unique_lock<boost::mutex> wlock(instance()->mtx5_);instance()->obp_result_.destroy(src);} }
總結(jié)
以上是生活随笔為你收集整理的boost之对象池使用实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: boost之内存池使用实例
- 下一篇: boost智能指针之shared_ptr