深入解析C++编程中线程池的使用

2020-01-06 14:01:59于海丽
  • */  class ThreadData 
  • {  public: 
  • /**  * @brief 构造 
  • */  ThreadData(){}; 
  • /**  * @brief 析够 
  • */  virtual ~ThreadData(){}; 
  •   /** 
  • * @brief 生成数据.  *  
  • * @ param T  * @return ThreadData* 
  • */  template<typename T> 
  • static T* makeThreadData()  { 
  • return new T;  } 
  • };   
  • /**  * @brief 设置线程数据. 
  • *   * @param p 线程数据 
  • */  static void setThreadData(ThreadData *p); 
  •   /** 
  • * @brief 获取线程数据.  * 
  • * @return ThreadData* 线程数据  */ 
  • static ThreadData* getThreadData();   
  • /**  * @brief 设置线程数据, key需要自己维护. 
  • *   * @param pkey 线程私有数据key 
  • * @param p 线程指针  */ 
  • static void setThreadData(pthread_key_t pkey, ThreadData *p);   
  • /**  * @brief 获取线程数据, key需要自己维护. 
  • *   * @param pkey 线程私有数据key 
  • * @return 指向线程的ThreadData*指针  */ 
  • static ThreadData* getThreadData(pthread_key_t pkey);   
  • protected:   
  • /**  * @brief 释放资源. 
  • *   * @param p 
  • */  static void destructor(void *p); 
  •   /** 
  • * @brief 初始化key  */ 
  • class KeyInitialize  { 
  • public:  /** 
  • * @brief 初始化key  */ 
  • KeyInitialize()  { 
  • int ret = pthread_key_create(&TC_ThreadPool::g_key, TC_ThreadPool::destructor);  if(ret != 0)