- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第
C++单例模式实现线程池的示例代码
C语言单例模式实现线程池。
该代码中,使用了单例模式来创建线程池对象,保证了整个程序中只有一个线程池对象。
线程池中包含了任务队列、工作线程数组、互斥锁、条件变量等成员,通过这些成员来实现任务的提交和执行。
在主函数中,提交了10个任务,每个任务都是一个简单的打印数字的函数,最后等待所有任务执行完毕后销毁线程池。
#includestdio.h
#includestdlib.h
#includepthread.h
#defineTHREAD_POOL_SIZE5
//任务结构体
typedefstruct{
void(*task)(void*);
void*arg;
}Task;
//线程池结构体
typedefstruct{
Task*tasks;//任务队列
intsize;//任务队列大小
inthead;//任务队列头指针
inttail;//任务队列尾指针
intcount;//任务队列中任务数量
pthread_mutex_tlock;//互斥锁
pthread_cond_tnot_empty;//非空条件变量
pthread_cond_tnot_full;//非满条件变量
intshutdown;//线程池是否关闭
pthread_t*threads;//工作线程数组
intthread_count;//工作线程数量
}ThreadPool;
//线程池单例结构体
typedefstruct{
ThreadPool*pool;//线程池指针
}ThreadPoolSingleton;
staticThreadPoolSingleton*instance=NULL;//线程池单例对象指针
//工作线程函数
void*worker(void*arg){
ThreadPool*pool=(ThreadPool*)arg;
while(1){
pthread_mutex_lock(pool-lock);
while(pool-count==0!pool-shutdown){
pthread_cond_wait(pool-not_empty,pool-lock);
if(pool-count==0pool-shutdown){
pthread_mutex_unlock(pool-lock);
pthread_exit(NULL);
Tasktask=pool-tasks[pool-head];
pool-head=(pool-head+1)%pool-size;
pool-count--;
pthread_cond_signal(pool-not_full);
pthread_mutex_unlock(pool-lock);
task.task(task.arg);
returnNULL;
//创建线程池函数
ThreadPool*create_thread_pool(intthread_count,intqueue_size){
ThreadPool*pool=(ThreadPool*)malloc(sizeof(ThreadPool));
pool-tasks=(Task*)malloc(sizeof(Task)*queue_size);
pool-size=queue_size;
pool-head=0;
pool-tail=0;
pool-count=0;
pthread_mutex_init(pool-lock,NULL);
pthread_cond_init(pool-not_empty,NULL);
pthread_cond_init(pool-not_full,NULL);
pool-shutdown=0;
pool-threads=(pthread_t*)malloc(sizeof(pthread_t)*thread_count);
pool-thread_count=thread_count;
for(inti=0;ithread_count;i++){
文档评论(0)