#include "matrix.h" #include #include struct point { int r; int c; } pt; int gResult[MATRIX_SIZE][MATRIX_SIZE]; void mult_entry(void *ptr) { struct point *deref_pt = (struct point*) ptr; gResult[deref_pt->r][deref_pt->c] = matrix_multiply(deref_pt->r, deref_pt->c); } int main(int argc, char* argv[]) { int row, col; int left[MATRIX_SIZE][MATRIX_SIZE]; int right[MATRIX_SIZE][MATRIX_SIZE]; pthread_t threads[100]; for(row = 0; row < MATRIX_SIZE; ++row) { for(col = 0; col < MATRIX_SIZE; ++col) { left[row][col] = (rand() % 2) + 1; right[row][col] = (rand() % 3) + 1; } } // this causes setleft and setright to operate in parallel { pthread_t init_thread; pthread_create(&init_thread, NULL, ({ void* setleft(void* arg) { set_left(left); return NULL; } setleft; }), NULL); set_right(right); pthread_join(init_thread, NULL); } /* change this loop to execute on 100 different threads (each thread does 1 row) */ for(row = 0; row < MATRIX_SIZE; ++row) { for(col = 0; col < MATRIX_SIZE; ++col) { struct point curPoint = { row, col }; pthread_create(&threads[(row * 10) + col], NULL, mult_entry, (void *) &curPoint); } } /* make the above line run in parallel */ print_matrix(gResult); return EXIT_SUCCESS; }