#include
#include
#include
#include
#include
#include
pthread_mutex_t counter_clock = PTHREAD_MUTEX_INITIALIZER;
static long long total_words = 0;
void * count_words(void*);
int main()
{
pthread_t t1, t2;
char * file1 = "/home/simon/file1";
char * file2 = "/home/simon/file2";
/*let t1 and t2 wait*/
pthread_mutex_lock(&counter_clock);
/*use file1 and file2 as parameters, create two thread t1 and t2*/
if(pthread_create(&t1, NULL, count_words, file1) != 0)
{
perror("t1 creation failed.\n");
}
if(pthread_create(&t2, NULL, count_words, file2) != 0)
{
perror("t2 creation failed.\n");
}
pthread_mutex_unlock(&counter_clock);
/*print the total number of word.*/
if(pthread_join(t2, NULL) != 0)
{
perror("t2 join failed.\n");
}
if(pthread_join(t1, NULL) != 0)
{
perror("t1 join failed.\n");
}
printf("Total words: %lld\n", total_words);
pthread_mutex_destroy(&counter_clock);
return 0;
}
void * count_words(void* f)
{
char *filename = (char *)f;
FILE * fp;
int c, prevc = '\0';
if((fp = fopen(filename,"r")) != NULL)
{
while((c=getc(fp)) != EOF)
{
if(!isalnum(c) && isalnum(prevc))
{
pthread_mutex_lock(&counter_clock);
total_words++;
pthread_mutex_unlock(&counter_clock);
}
prevc = c;
}
fclose(fp);
}
else
{
perror(filename);
}
pthread_exit(0);
return NULL;
}