#include #include #include #include "popp_thread.h" static int *array; static int length = 100000; static void make_array() { int i; array = (int *)malloc(length * sizeof(int)); for (i = 0; i < length; i++) { array[i] = 1; } array[0] = 2; /* results: 2 300002 599996 */ /* array[0] = 3; => results: 6 300006 600000 */ } static int convert(int v) { int i; /* Arbitrary time-consuming calculation: */ for (i = 0; i < 1000; i++) { v = ((v * v) + v) % 10; } return v; } static int deconvert(int v) { return v; /* for part 2, use instead: return convert(v); */ } static int do_section(int start, int end, int accum) { int i; for (i = start; i < end; i++) { accum += convert(array[i]); array[i] = deconvert(accum); } return accum; } /*****************************************/ /* No-threads case: */ void sequential_sums() { do_section(0, length, 0); } /*****************************************/ /* Two-threads case: */ void parallel_sums() { /* ... you fill this in ... */ } /*****************************************/ int main(int argc, char **argv) { make_array(); sequential_sums(); printf("%d %d %d\n", array[0], array[length / 2], array[length - 1]); return 0; }