Categories
Uncategorized

C program. NOT C++
specialcountmulthreads.c is not completed. Need some modification
31 text files named input_00.txt to input_30.txt.
Requirements:
Multiple threads are expected to run in parallel to share the workload, i.e. suppose 3 threads to process 30 files totally, then each thread should process 10 files;
When a thread is created, a message should be print out showing which files this thread will process, for example:
Thread id = 274237184 starts processing files with index from 0 to 10!
When a file is being processed, a message should be print out showing which thread (thread_id = xxx) is processing this file, for example:
Thread id = 265844480 is processing file input_11.txt
When a thread is done with its workload, a message should be print out showing which files this thread has done with work, for example:
Thread id = 274237184 is done !
The array long specialfreq[ ] should always be up-to-date, i.e. it always has the result of all the threads counted so far. [You may need to use mutexes to protect this critical region.]
======specialcountmulthreads.c=====================
#include
#include
#include
#include
#include
#include #define MAX_FILES 30
#define MAX_LEN 1000
int num_threads;
char *filename[MAX_FILES];
int num_files;
long specialfreq[MAX_FILES];
int *index_array[MAX_FILES];
void *thread_function(void *arg) {
int *index = (int *) arg;
int i;
int my_index = *index;
int starting_index = my_index * (num_files / num_threads);
int ending_index = starting_index + (num_files / num_threads);
FILE *fp;
char ch;
int count = 0;
char line[MAX_LEN];
printf(“Thread ID: %lu starts working on files %d to %d.n”, pthread_self(), starting_index, ending_index);
for (i = starting_index; i < ending_index; i++) { fp = fopen(filename[i], "r"); if (fp == NULL) { perror("Error opening file"); } else { printf("Thread ID: %lu is working on file %sn", pthread_self(), filename[i]); while (fgets(line, sizeof (line), fp) != NULL) { ch = fgetc(fp); if (ch == '!') { count++; } } specialfreq[i] = count; fclose(fp); } } printf("Thread ID: %lu is done!n", pthread_self()); pthread_exit(NULL); } void specialcountmulthreads(char *path, char *filetowrite, long specialfreq[], int num_threads) { pthread_t tid; int i; int err; int total_count = 0; if (argc < 3) { printf("Usage: ./a.out num_threads input_file1 input_file2 ... input_file30"); exit(0); } num_threads = atoi(argv[1]); num_files = argc - 2; //printf("Num thread: %dn", num_threads); //printf("Num files: %dn", num_files); for (i = 2; i < argc; i++) { filename[i - 2] = argv[i]; //printf("Argv: %sn", argv[i]); //printf("Filename: %sn", filename[i - 2]); } for (i = 0; i < num_files; i++) { index_array[i] = malloc(sizeof (int)); *index_array[i] = i; //printf("Index array: %dn", *index_array[i]); //printf("Index array: %dn", index_array[i]); } for (i = 0; i < num_threads; i++) { err = pthread_create(&tid, NULL, thread_function, index_array[i]); if (err != 0) { printf("ncan't create thread :[%s]", strerror(err)); } } for (i = 0; i < num_files; i++) { total_count += specialfreq[i]; } printf("Total count: %dn", total_count); return 0; } ======================testmulthreads.c===================================================== #include
#include
#include
#include
#include
#include
#include
#include “count.h”
/*
* Print the frequencies of special words stored in array: specialfreq[] to output screen in the format as:
* letter -> frequency (one letter a line)
* Input: specialfreq – array having the frequency of each special word
size – the total number of special words
* example:
* he -> 250932
* she -> 181764
*/
void displayalphabetfreq(long specialfreq[], int size)
{
for(int i = 0; i < size; i++) { switch (i) { case 0: printf("%s -> %dn”, “he”, specialfreq[i]);
break;
case 1:
printf(“%s -> %dn”, “she”, specialfreq[i]);
break;
case 2:
printf(“%s -> %dn”, “they”, specialfreq[i]);
break;
case 3:
printf(“%s -> %dn”, “him”, specialfreq[i]);
break;
case 4:
printf(“%s -> %dn”, “me”, specialfreq[i]);
break;
defalut:
printf(“%s”, “Wrong number of special words … “);
}
}
}
int main(int argc, char *argv[])
{
printf(“Please enter 2 arguments only eg.”./testmulthreads #_of__threads!!””n””);

Categories
Uncategorized

Hello world!

Welcome to WordPress. This is your first post. Edit or delete it, then start writing!