感谢这篇博文提供了这么好的一个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::

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

被折叠的 条评论
为什么被折叠?



