• 大小: 516KB
    文件类型: .gz
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: 其他
  • 标签: 多线程  

资源简介

这个文件包含三个文件夹,有自己写的两个版本以及一个网上的版本,操作步骤详尽,注释清晰

资源截图

代码片段和文件信息

#include
#include
#include
#include

#define filenumbers 3//表示文件个数
#define filenamenum 256//表示文件名最长为256
int cal(char filename[256]);
void *thread_function(void *arg);

int wordcount=0;
int sx=0;
char filenames[filenumbers][filenamenum]={“file1““file2““file3“};

pthread_mutex_t  fileMutex;//定义一个互斥变量
int main()
{ int i=0;
int flag;//用于判断操作是不是正确
pthread_t thread[3];
int count1=0count2=0count3=0;

/*互斥锁初始化*/
flag=pthread_mutex_init(&fileMutexNULL);
if(flag!=0)
{
perror(“Mutex initalization failed!\n“);
return 1;
}

/*create pthread*/
for(i=0;i<3;i++)
{
flag=pthread_create(&thread[i]NULLthread_function(void*)i);
if(flag!=0)
{
perror(“Thread creation failed!\n“);
return 1;
}
}


pthread_join(thread[0](void**)&count1);
pthread_join(thread[1](void**)&count2);
pthread_join(thread[2](void**)&count3);

wordcount=count1+count2+count3;
printf(“总的单词数:%d\n“wordcount);
return 0;
}





int cal(char filename[256])
{
bool start;
int count=0;//用于记录单词数
char c;
long int offset;
FILE *fp;
fp=fopen(filename“r“);
if(fp==NULL)
{
printf(“open filed!\n“);
exit(EXIT_FAILURE);
}

fseek(fp0SEEK_SET);
start=true;//start=0用于表示单词的开始start=1表示没有
while(feof(fp)==0)//feof(fp)==0 表示还没有到文件尾
{
fread(&c11fp);
if(c==‘ ‘&&start==1)
{
start=1;
}
else if(c!=‘ ‘&&start==1)
{
start=0;
count++;
}
else if(c==‘ ‘&&start==0)
{
start=1;
}
}
printf(“%s“filename);
printf(“word count:%d\n“count);
return count;
}
void *thread_function(void *arg)
{
FILE *fp;
if(((int)arg)==0)
{
fp=fopen(filenames[0]“rb“);
if(fp==NULL)
{
perror(“open file1 falied!\n“);
//return (void*)1;
exit(EXIT_FAILURE);
}
return (void*)cal(“file1“);
}
else if(((int)arg)==1)
{
fp=fopen(filenames[1]“rb“);
if(fp==NULL)
{
perror(“open file2 falied!\n“);
//return (void*)1;
exit(EXIT_FAILURE);
}
return (void*)cal(“file2“);

}
else if(((int)arg)==2)
{
fp=fopen(filenames[2]“rb“);
if(fp==NULL)
{
perror(“open file3 falied!\n“);
//return (void*)1;
exit(EXIT_FAILURE);
}
return (void*)cal(“file3“);
}
}

评论

共有 条评论

相关资源