多线程文件复制程序(4个线程)
来源:互联网 发布:淘宝链接转微信链接 编辑:程序博客网 时间:2024/05/21 07:54
用法和之前的那个程序一样
#include<stdio.h>
#include<string.h>
#include<io.h>
#include<omp.h>//使用openmp的头文件
#include<time.h>
#define N 3
#define M 1000
void cp(FILE *S,FILE *d,int l,char tmp[]);
int main(int argc,char *argv[])
{
FILE *s,*d;
char tmp[M];
int i,j;
__int64 lg,l;
clock_t t1,t2;//定义两个时间变量,用来计时用的
l=M;
t1=clock();
//printf("%d/n",l);
if(argc>N)
{
printf("参数异常/n");
return 0;
}
if((argc==1)||((argc==N-1)&&(strcmp(argv[argc-1],"/?")==0)))
{
printf("eg:hd file1 file2 /n");
return 0;
}
if((s=fopen(argv[1],"rb"))==NULL)
{
printf("打开源文件失败/n");
return 0;
}
else
{
printf("打开源文件成功/n");
}
if((d=fopen(argv[2],"rb"))!=NULL)
{
printf("目的文件已存在/n");
fclose(s);
fclose(d);
return 0;
}
if((d=fopen(argv[2],"ab"))!=NULL)
{
printf("创建目的文件成功/n");
}
lg=filelength(fileno(s));
if(lg<=l)
{
//printf("进入lg<=l判断,文件长度为%d个字节/n",lg);
fread(tmp,sizeof(char),lg,s);
fwrite(tmp,sizeof(char),lg,d);
fclose(s);
fclose(d);
return 0;
}
//printf("%d/n",l);
i=j=lg/l;
//printf("/n文件长度%d个字节/n",lg);
omp_set_num_threads(4);//使用4个线程复制文件
omp_lock_t mylock;//定义一个线程锁
omp_init_lock(&mylock);//初始化线程锁
#pragma omp parallel for //schedule(static)
for(i=0;i<j;i++)
{
//printf("/n当前进入第%d次for循,等待复制文件长度为%d个字节/n",j-i+1,lg-l*i);
//printf("本次复制文件长度为%d个字节/n",l);
omp_set_lock(&mylock);//上锁
cp(s,d,l,tmp);
omp_unset_lock(&mylock);//解索
}
omp_destroy_lock(&mylock);//关闭锁
l=lg-l*j;
fread(tmp,sizeof(char),l,s);
fwrite(tmp,sizeof(char),l,d);
fclose(s);
fclose(d);
t2=clock();
printf("/n耗时%d毫秒/n",t2-t1);//输出程序运行时间
return 0;
}
void cp(FILE *s,FILE *d,int l,char tmp[])
{
fread(tmp,sizeof(char),l,s);
fwrite(tmp,sizeof(char),l,d);
}
- 多线程文件复制程序(4个线程)
- 多线程复制文件比单线程慢?
- Google多线程面试题: 4个线程向4个文件里写入数据, 每个线程只能写一个值
- Google多线程面试题: 4个线程向4个文件里写入数据, 每个线程只能写一个值
- 问题: 写一个多线程程序实现铁路卖票系统,4个窗口同时售票,线程同步
- JAVA多线程复制文件
- JAVA多线程文件复制
- 用多线程复制文件
- java多线程复制文件
- 多线程复制文件
- 多线程复制文件
- 多线程文件复制
- 多线程复制文件
- Linux 多线程文件复制
- 多线程复制文件
- java多线程复制文件
- 多线程实现文件复制
- Java多线程复制文件
- 家有千金之描红
- SAAS的出路
- 面试大连花旗的必看--java面试笔试题整理(2)
- 兼容IE8样式
- Magic WinMail Server漏洞
- 多线程文件复制程序(4个线程)
- 11个笑话让你领悟人生
- 谁在瓜分60亿报表软件市场
- 关于2.6 的 spi驱动,spidev,使用从设备.
- Visual Studio 2005快捷键大全
- 一个java程序员的成长历程(转载)
- DirectShow中通过IAMStreamSelect接口实现多音轨切换
- javascript正则表达式详解
- 致学