#include #include #include #define MAX_THREADS 4 // Shared data int *arr; long long partial_sum[MAX_THREADS]; int n; // Per-thread input typedef struct { int thread_id; int start; int end; } thread_data; void *compute_sum(void *args) { thread_data *data = (thread_data *)args; long long sum = 0; for (int i = data->start; i < data->end; i++) sum += arr[i]; partial_sum[data->thread_id] = sum; pthread_exit(NULL); } int main() { printf("Enter number of elements: "); scanf("%d", &n); arr = (int *)malloc(n * sizeof(int)); printf("Enter %d elements:\n", n); for (int i = 0; i < n; i++) scanf("%d", &arr[i]); pthread_t threads[MAX_THREADS]; thread_data threadArgs[MAX_THREADS]; int chunk = n / MAX_THREADS; // Create threads for (int i = 0; i < MAX_THREADS; i++) { threadArgs[i].thread_id = i; threadArgs[i].start = i * chunk; // last thread takes the remaining elements threadArgs[i].end = (i == MAX_THREADS - 1) ? n : (i + 1) * chunk; pthread_create(&threads[i], NULL, compute_sum, &threadArgs[i]); } // Wait for all threads for (int i = 0; i < MAX_THREADS; i++) pthread_join(threads[i], NULL); // Combine results long long total = 0; for (int i = 0; i < MAX_THREADS; i++) total += partial_sum[i]; printf("Parallel sum = %lld\n", total); free(arr); return 0; }