linux 多线程拷贝

多线程拷贝

1.系统调用,打开文件与创建文件(open/write)

linux 多线程拷贝
打开需要拷贝的文件,并且检查是否打开成功
linux 多线程拷贝
创建新文件,同样设置出错判断

2.获取打开文件的大小,设置新文件的大小(ftruncate)

linux 多线程拷贝
获取打开文件的大小,使用的函数为fstat,它的第二参数是一个传入传出参数
linux 多线程拷贝
设置新文件大小,使用ftruncate,同时将新文件的文件指针置于首部

3.创建线程等分文件(由于存在不等分的现象,最后一个取余加等分数)

linux 多线程拷贝
创建线程与回收线程,指定线程函数,传入每个线程拷贝的大小

4.开始拷贝,读写文件互斥访问,防止出现异常

linux 多线程拷贝
设置互斥量开始拷贝,锁的粒度可以更小一点,可以设置两把锁,一个读锁,一个写锁,但是这里为了演示就不做那么详细了;(文件位置设置的不对)(filelocation不应该设置在那里,看的小伙伴注意一下这个问题)应当设置在锁的里面,这样才不会出现信息错乱的问题。

最后释放资源

释放锁与关闭文件描述符

结果

linux 多线程拷贝
linux 多线程拷贝
linux 多线程拷贝
大致上看没什么问题,但是有时候会出现问题,就是如上面所说的文件位置设置的位置不应该在那里,看的朋友们自己可以纠正一下;由于我开的线程数比较大,平均分配的小,自己写的小伙伴可以自行设置哦!