マルチスレッドは複数のファイルの単語数を統計します.
タイトルから意味が分かります.ここでは最後に自分の最適化したコードを貼り付けるだけです.他のバージョンと私の資源からダウンロードしてください.http://download.csdn.net/detail/chenqiai0/5233058
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#include<stdbool.h>
#define filenumbers 3//
#define filenamenum 256// 256
int cal(char filename[256]);
void *thread_function(void *arg);
int wordcount=0;//
int count[3]={0,0,0};// 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=0,count2=0,count3=0;
/* */
flag=pthread_mutex_init(&fileMutex,NULL);
if(flag!=0)
{
perror("Mutex initalization failed!
");
return 1;
}
/*create pthread*/
for(i=0;i<3;i++)
{
flag=pthread_create(&thread[i],NULL,thread_function,(void*)&filenames[i]);
if(flag!=0)
{
perror("Thread creation failed!
");
return 1;
}
}
//pthread_join(thread[0],(void**)&count1);
//pthread_join(thread[1],(void**)&count2);
//pthread_join(thread[2],(void**)&count3);
for(i=0;i<3;i++)
{
pthread_join(thread[i],(void**)&count[i]);
}
wordcount=count[0]+count[1]+count[2];
printf(" :%d
",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!
");
exit(EXIT_FAILURE);
}
fseek(fp,0,SEEK_SET);
start=true;//start=0 ,start=1
while(feof(fp)==0)//feof(fp)==0
{
fread(&c,1,1,fp);
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
",count);
return count;
}
void *thread_function(void *arg)
{
return (void*)cal((char*)arg);
}
みんなのもっと良い方法を信じて、メッセージを下さい.