Linux——多线程(五)
1.线程池
1.1初期框架
thread.hpp
#include #include #include #include #include namespace ThreadModule { using func_t = std::function; class Thread { public: void Excute() { _func(); } public: Thread(func_t func, std::string name="none-name") : _func(func), _threadname(name), _stop(true) {} static void *threadroutine(void *args) //注意:类成员函数,形参是有this指针的 { Thread *self = static_cast(args); self->Excute(); return nullptr; } bool Start() { int n = pthread_create(&_tid, nullptr, threadroutine, this); if(!n) { _stop = false; return true; } else { return false; } } void Detach() { if(!_stop) { pthread_detach(_tid); } } void Join() { if(!_stop) { pthread_join(_tid, nullptr); } } std::string name() { return _threadname; } void Stop() { _stop = true; } ~Thread() {} private: pthread_t _tid;//线程tid std::string _threadname;//线程名字 func_t _func;//线程所要执行的函数 bool _stop;//判断线程是否停止 }; }
ThreadPool.hpp
#include #include #include #include #include"Thread.hpp" using namespace ThreadModule; const int g_thread_num = 3;//默认线程数 // 线程池->一批线程,一批任务,有任务push、有任务pop,本质是: 生产消费模型 template class ThreadPool { public: ThreadPool(int threadnum=g_thread_num)//构造函数 :_threadnum(threadnum) , _waitnum(0) , _isrunning(false) { pthread_mutex_init(&_mutex,nullptr);//初始化锁 pthread_cond_init(&_cond,nullptr);//初始化条件变量 } void Print() { while(true) { std::cout
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。