一、实现原理
1.线程池:一个包括互斥锁、条件变量、任务链表、线程id集合、等待任务数目、线程数目、以及开关的结构体,
实现多个线程处理任务。对此结构体的操作包括初始化、投放任务、增加线程、销毁线程池等。
2.文件拷贝(任务):以系统IO函数:open、read、write、close实现对源文件的读取,对新建的目标文件的写入。
3.以递归方式遍历得到每个目录下的所有文件的路径,使用mkdir以及closedir函数创建新的目录,投放任务。
二、源代码
2.1线程池相关
#include "thread_pool.h"
/****线程取消例程****/
void handler(void *arg)
{
pthread_mutex_unlock((pthread_mutex_t *) arg);
}
/****线程执行函数(去完成任务)****/
void *func(void *arg)
{
thread_pool *pool = (thread_pool *)arg;
struct task *p;
while(1)
{
/*1.访问任务队列前加锁,并注册取消例程防止取消死锁*/
pthread_mutex_lock(&pool->lock);
pthread_cleanup_push(handler, (void *)&pool->lock);
/*2.如果任务队列没有任务而且线程池开关
打开,线程等待条件变量*/
if(pool->waiting_tasks == 0 && pool->shutdown