マルチスレッドは複数のファイルの単語数を統計します.


タイトルから意味が分かります.ここでは最後に自分の最適化したコードを貼り付けるだけです.他のバージョンと私の資源からダウンロードしてください.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); }
みんなのもっと良い方法を信じて、メッセージを下さい.