基于lnux的线程池实现目录拷贝

本文介绍了如何利用线程池在Linux下实现目录的拷贝,涉及线程池的结构与操作,包括初始化、任务投放和销毁,以及文件拷贝的实现,通过递归遍历目录并创建新目录。
摘要由CSDN通过智能技术生成

一、实现原理

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 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值