/** * Solution to exercise 4.22 * * Operating System Concepts - Tenth Edition * Copyright John Wiley & Sons, 2018. */ #include #include #include /* the list of integers */ int *list; /* the threads will set these values */ double average; int maximum; int minimum; void *calculate_average(void *param); void *calculate_maximum(void *param); void *calculate_minimum(void *param); int main(int argc, char *argv[]) { int i; int num_of_args = argc - 1; /* allocate memory to hold array of integers */ list = malloc(sizeof(int) * num_of_args); for (i = 0; i < num_of_args; i++) list[i] = atoi(argv[i + 1]); /* create the threads */ calculate_average(&num_of_args); calculate_maximum(&num_of_args); calculate_minimum(&num_of_args); printf("The average is %f\n", average); printf("The maximum is %d\n", maximum); printf("The minimum is %d\n", minimum); return 0; } void *calculate_average(void *param) { int count = *(int *)param; int i, total = 0; printf("count = %d\n", count); for (i = 0; i < count; i++) printf("%d\n", list[i]); for (i = 0; i < count; i++) total += list[i]; average = total / count; } void *calculate_maximum(void *param) { int count = *(int *)param; int i; maximum = list[0]; for (i = 1; i < count; i++) if (list[i] > maximum) maximum = list[i]; } void *calculate_minimum(void *param) { int count = *(int *)param; int i; minimum = list[0]; for (i = 1; i < count; i++) if (list[i] < minimum) minimum = list[i]; }