C++单例模式实现线程池的示例代码.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

183****9196 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档