场景:

1.在一些多线程的程序中,比如服务端响应请求时,可以同时响应多个客户端的请求,但是响应请求的个数(即线程)的个数过多的话就会造成系统资源损耗过多而宕机,还比在做一些下载的程序时,可同时开5个下载任务,对应的其实就是线程。但是最多线程是有上限的,而且每次创建线程和销毁线程都会大量损耗资源和时间。所以解决办法之一就是使用线程池控制线程个数,复用创建过的线程。

threadpool直接使用Boost库,不需要另外编译Boost库

只是开启线程,调度线程的数量,不对单个线程进程操作(比如暂停,恢复,停止)

编译的时候注意加上链接库:

LIBS := -lboost_thread

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <boost/threadpool.hpp>

using namespace std;
using namespace boost::threadpool;


void task_1()
{
	cout << "task_1 start" << endl;
	cout << "thead_id(task_1): " << boost::this_thread::get_id() << endl;
	for (int i = 0; i < 10; i++)
	{
		cout << "1111111111111111111111111" << endl;
		sleep(1);
	}
}

void task_2()
{
	cout << "task_2 start" << endl;
	cout << "thead_id(task_2): " << boost::this_thread::get_id() << endl;
	for (int i = 0; i < 30; i++)
	{
		cout << "222222222222222222222222" << endl;
		sleep(1);
	}
}

void DoGetVersionNoForUpdate(int a)
{
	cout << "task_3 start" << endl;
	cout << "thead_id(task_3): " << boost::this_thread::get_id() << endl;
	for (int i = 0; i < 5; i++)
	{
		cout << a*a << endl;
		sleep(1);
	}
}


int main(int argc, char *argv[])
{
	//设置允许开启的线程数
	pool tp(10);

	//加入线程调度,可以通过指针传参
	tp.schedule(&task_1);
	tp.schedule(&task_2);
	int i =10;
	tp.schedule(boost::bind(DoGetVersionNoForUpdate, i));

	//tp.wait();
	
	return (0);
}


GitHub 加速计划 / th / ThreadPool
7.74 K
2.22 K
下载
A simple C++11 Thread Pool implementation
最近提交(Master分支:2 个月前 )
9a42ec13 - 9 年前
fcc91415 - 9 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐