From c452c1eecb3258b62126e564c7f58828bb979b79 Mon Sep 17 00:00:00 2001 From: josh Date: Fri, 26 Sep 2008 16:43:05 +0000 Subject: [PATCH] moved shared data into global variables, removed SMArg struct git-svn-id: svn://anubis/gvsu@167 45c1a28c-8058-47b2-ae61-ca45b979098e --- cs677/pa2/threaded.cc | 38 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/cs677/pa2/threaded.cc b/cs677/pa2/threaded.cc index 102313b..018f09f 100644 --- a/cs677/pa2/threaded.cc +++ b/cs677/pa2/threaded.cc @@ -15,19 +15,15 @@ using namespace std; #define eq(x, y) ( ( (x) == (y) ) || ( (x) == '?' ) || ( (y) == '?' ) ) -typedef struct -{ - vector * s; - vector * t; - int id; - void * matrix; -} SMArg; - void usage(char * prog); void * calcSimMatrixThread(void * arg); bool readFile(char * fileName, vector & v); pthread_barrier_t barrier; +int num_threads; +int * matrix; +vector * s; +vector * t; /* Print basic usage information */ void usage(char * prog) @@ -39,7 +35,7 @@ void usage(char * prog) int main(int argc, char * argv[]) { vector files[2]; - int num_threads = 1; + num_threads = 1; int file_to_read = 0; for (int i = 1; i < argc; i++) @@ -64,19 +60,15 @@ int main(int argc, char * argv[]) if (file_to_read != 2) usage(argv[0]); + s = &files[0]; + t = &files[1]; pthread_t * threads = new pthread_t[num_threads]; - int * similarityMatrix = new int[files[0].size() * files[1].size()]; + matrix = new int[files[0].size() * files[1].size()]; pthread_barrier_init(&barrier, NULL, num_threads); for (int i = 0; i < num_threads; i++) { - SMArg * arg = new SMArg; - arg->s = &files[0]; - arg->t = &files[1]; - arg->id = i; - arg->matrix = similarityMatrix; - - int ret = pthread_create(&threads[i], NULL, &calcSimMatrixThread, arg); + int ret = pthread_create(&threads[i], NULL, &calcSimMatrixThread, (void *) i); if (ret) { cerr << "Error " << ret << " when creating thread!" << endl; @@ -91,6 +83,7 @@ int main(int argc, char * argv[]) pthread_barrier_destroy(&barrier); + delete[] matrix; delete[] threads; return 0; } @@ -113,10 +106,10 @@ bool readFile(char * fileName, vector & v) /* Compute portions of the similarity matrix between two character arrays */ void * calcSimMatrixThread(void * arg) { - SMArg * smarg = (SMArg *) arg; - int s_size = smarg->s->size(); - int t_size = smarg->t->size(); - int (*F)[s_size][t_size] = (int (*) [s_size][t_size]) smarg->matrix; + int id = (int) arg; + int s_size = s->size(); + int t_size = t->size(); + int (*F)[s_size][t_size] = (int (*) [s_size][t_size]) matrix; int max_x = 0, max_y = 0, max_val = 0; for (int i = 0; i < t_size; i++) /* set first row to 0's */ (*F)[0][i] = 0; @@ -132,7 +125,7 @@ void * calcSimMatrixThread(void * arg) max( (*F)[i][j-1] - 2, (*F)[i-1][j-1] + - (eq(smarg->s->at(i), smarg->t->at(j)) ? 1 : -1) + (eq(s->at(i), t->at(j)) ? 1 : -1) ), max( (*F)[i-1][j] - 2, @@ -162,6 +155,5 @@ void * calcSimMatrixThread(void * arg) cout << "Maximum value is " << max_val << " at position (" << max_x << ", " << max_y << ")" << endl; - delete smarg; return NULL; }