对c++线程池的一点理解

本文探讨了C++线程池的概念和作用,强调了线程池通过减少线程创建和销毁的开销提高效率。线程池适用于网络服务器,实现时需要掌握线程同步与互斥。文中介绍了线程池的组成部分,包括线程池管理器、工作线程、任务接口和任务队列,并讨论了可能存在的线程同步问题,特别是当任务队列为空且接收到退出通知时,线程的处理策略可能存在潜在问题。
摘要由CSDN通过智能技术生成

感谢这篇博文提供了这么好的一个demo让我学习了如何用C++实现一个线程池。本博文也是基于此篇博文对线程池作一点粗浅的讨论。

线程池,就是一个用来管理已经创建线程,并控制他们执行一定的任务的一个结构。之所以需要线程池,是因为线程的创建和销毁比较耗费资源,而线程池可以创建一定的阻塞线程,使他们能根据需要被调用,从而减小不必要的开销。

貌似线程池多用于网络服务器。

当然,要使用线程池需要一个前置的技能,就是要学会使用线程间的同步和互斥。这些就分别由信号量和锁,好在POSIX已经为我们提供了这一种机制,以至于我们不用从最底层开始实现。

有关于锁和信号量的套路这里就不在赘述了。网上有许多优秀的教程,这里也有我的一点理解。

在实现线程池时,为了方便,由于pthread中的信号量一般会和锁同时使用,首先需要对锁和信号量作一个封装。
以下是实现代码

struct my_mutex{
   
	pthread_mutex_t mmutex;
	pthread_cond_t mcond;
	int init();		//初始化
	int destroy();	//释放
	int lock();		//加锁
	int unlock();	//解锁
	int wait(); 	//信号量P操作
	int timedwait(const struct timespec *tm);//有限时间等待
	int signal();	//信号量V操作
	int broadcast(); //唤醒所有线程
};

int my_mutex::init(){
   
	int res;
	res=pthread_mutex_init(&mmutex,NULL);
	if(res)
		return res;
	res=pthread_cond_init(&mcond,NULL);
	return res;
}
int my_mutex::destroy(){
   
	int res;
	res=pthread_mutex_destroy(&mmutex);
	if(res)
		return res;
	res=pthread_cond_destroy(&mcond);
	return res;
}
int my_mutex::lock(){
   
	return pthread_mutex_lock(&mmutex);
}
int my_mutex::unlock(){
   
	return pthread_mutex_unlock(&mmutex);
}
int my_mutex::
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值