void UnixProcessFunction(int processId){ int i,j; for(i = processId; i < mAlines; i += numUnixProcess){ int* processLine = (int*) malloc(mAcolumns * sizeof(int)); getLineValues(matrixA, mAcolumns, i, processLine); for(j = 0; j < mBcolumns; j++){ int* processColumn = (int*) malloc(mBlines * sizeof(int)); getColumnValues(matrixB,mBlines,j,processColumn); matrixResult[i * mResultcolumns + j] = multiplyLineColumn(processLine, processColumn, mAcolumns); } } }
int* forkn(int n, int *buckets, int *matrix1, int n1, int m1, int *matrix2, int n2, int m2) { pid_t pid; int i, j, l; int current_line = 0; int k = 0; int *result_matrix = (int*)calloc(n1*m2, sizeof(int)); for (i = 0; i < n; i++) { if ((pid = vfork()) < 0) { printf("vfork error"); } else if (pid == 0) { printf("child "); int n_lines = buckets[k]; for (j = 0; j < n_lines; j++) { for (l = 0; l < m2; l++) { result_matrix[ID(m2,current_line,l)] = multiplyLineColumn(matrix1, matrix2, m1, m2, current_line, l); } current_line++; } k++; _exit(0); } } return result_matrix; }