#include <memory>
#include <functional>
#include <thread>
#include <iostream>
#include <vector>
class Thread
{
public:
using ThreadFunction = std::function<void()>;
Thread(ThreadFunction func,int id):func_(func),thread_id_(id){}
void Start()
{
std::cout<<"thread "<<thread_id_<<" start working"<<std::endl;
thread_ = std::make_shared<std::thread>(func_);
}
void Stop()
{
if(thread_->joinable())
{
thread_->join();
}
}
~Thread(){}
private:
std::shared_ptr<std::thread> thread_;
int thread_id_;
ThreadFunction func_;
};
class ThreadPool
{
public:
ThreadPool():threads_nums_(0){};
~ThreadPool()
{
for(int i = 0;i < threads_nums_;++i)
{
thread_pool_[i]->Stop();
delete thread_pool_[i];
}
}
void Start(int threads_num)
{
threads_nums_ = threads_num;
for(int i = 0;i<threads_num;++i)
{
thread_pool_.push_back(new Thread(std::bind(&ThreadPool::RunInThread,this,i),i));
}
for(int i = 0;i<threads_num;++i)
{
thread_pool_[i]->Start();
}
}
private:
std::vector<Thread*> thread_pool_;
int threads_nums_;
void RunInThread(int id)
{
std::cout<<"RunInThread id = "<<id<<std::endl;
}
};
int main()
{
ThreadPool pool;
pool.Start(8);
std::this_thread::sleep_for(std::chrono::microseconds(1000));
return 0;
}
c++面试题:实现一个简单的线程池
最新推荐文章于 2024-06-18 20:56:35 发布