C语言 NOTE38

系统编程之线程池


在进程中,创建多个线程,每当有任务执行时,直接调用已创建好的线程执行,不需要额外创建线程。

实际情况是线程的数量受限于计算机内存不能创建太多,那么就可以利用线程池设置线程数量上限

在这里插入图片描述


那么如何设计这个任务工作链表?

单项不循环链表

struct task_list{
	route *fuc;//线程执行任务函数指针,该指针指向返回值void*,参数为void*的函数
	void *arg//线程执行任务函数的参数
	struct task_list *next;	
};

结构体成员是函数怎么定义
自定义一个函数类型

typedef void *(route)(void *);
	//定义了一个route为返回值void*,参数为void*的函数

如何设计线程池?

为避免多个线程争抢同一个任务,使用互斥锁
为让线程池中等待的线程知道有任务需要他们,使用条件变量通知等待的线程

struct pthread_pool{

	pthread_mutex_t   m;//互斥锁
	pthread_cond_t    v;//条件变量
	
	struct task_list *list;//任务工作链表,
							//malloc分配内存空间后,用于保存链表头部
	pthread_t *tid;//线程数组
					//malloc分配内存空间后,再确定数组大小;
	unsigned int active_pthread;//正在运行的子线程个数
	unsigned int wait_pthread;//正在等待子线程个数
	bool shutdown;//退出线程池的标志位
};
发布了52 篇原创文章 · 获赞 2 · 访问量 1988

猜你喜欢

转载自blog.csdn.net/weixin_42191545/article/details/104445281
今日推荐