37.bind和function实现mini线程池

Posted 为了财务自由!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了37.bind和function实现mini线程池相关的知识,希望对你有一定的参考价值。

bind绑定器返回的结果还是一个函数对象

bind是函数模板,可以自动推演模板类型参数

class Thread

public:
	Thread(function<void(int)> func,int no):_func(func),_no(no) 
	thread start()
	
		thread t(_func,_no);//_func(_no)
		return t;
	
private:
	function<void()> _func;
	int _no;
;

class ThreadPool

public:
	ThreadPool()
	~ThreadPool()
	
		//释放Thread对象占用的堆资源
		for(int i=0;i<_pool.size();++i)
		
			delete _pool[i];
		
	
	void startPool(int size)
	
		for(int i=0;i<size;++i)
		
			_pool.push_back(new Thread(bind(&Thread::runInThread,this,_1),i));
		
		for(int i=0;i<size;++i)
		
			_handler.push_back(_pool[i]->start());
		
		for(thread& t : _handler)
		
			t.join();
		
	
private:
	vector<Thread*> _pool;
	vector<thread> _handler;
	void runInThread(int id)
	
		cout << "call runInThread!id:" << id << endl;
	
:

int main()

	ThreadPool pool;
	pool.startPool(10);
	return 0;

以上是关于37.bind和function实现mini线程池的主要内容,如果未能解决你的问题,请参考以下文章

MySQL具体解释----------MySQL线程池总结

自己实现一个简单的线程池

为啥我的线程池有时会抛出 `std::bad_function_call` 或 `double free or corruption (!prev)`

『计算机视觉』mini深度学习框架实现

Java线程池实现原理和源码分析

ExecuterService实现线程池1