সমস্যা বিবরণ
খুব বড় একটি ইন্টিজার অ্যারে দেওয়া আছে, মাল্টিথ্রেডিং ব্যবহার করে অ্যারেতে সর্বোচ্চ উপাদান বের করুন।
উদাহরণ
ইনপুট অ্যারে যদি {10, 14, -10, 8, 25, 46, 85, 1673, 63, 65, 93, 101, 125, 50, 73, 548} হয়, তবে
এই অ্যারেতে সর্বোচ্চ উপাদান হলো 1673
অ্যালগরিদম
- অ্যারে সাইজকে total_elements ধরি
- Nটি থ্রেড তৈরি করুন
- প্রতিটি থ্রেড (total_elements/N) সংখ্যক অ্যারে উপাদান প্রসেস করবে এবং সেখান থেকে সর্বোচ্চ উপাদান বের করবে।
- শেষে প্রতিটি থ্রেড রিপোর্ট করা সর্বোচ্চ মান থেকে চূড়ান্ত সর্বোচ্চ মান বের করুন।
উদাহরণ
#include <stdio.h> #include <pthread.h> #include <stdlib.h> #include <limits.h> #define MAX 10 #define SIZE(arr) (sizeof(arr) / sizeof(arr[0])) typedef struct struct_max { int start; int end; int thread_num; } struct_max; int arr[] = {10, 14, -10, 8, 25, 46, 85, 1673, 63, 65, 93, 101, 125, 50, 73, 548}; int max_values_from_threds[MAX]; void *thread_fun(void *arg) { struct_max *s_max = (struct_max*)arg; int start = s_max->start; int end = s_max->end; int thread_num = s_max->thread_num; int cur_max_value = INT_MIN; for (int i = start; i < end; ++i) { if (arr[i] > cur_max_value) { cur_max_value = arr[i]; } } max_values_from_threds[thread_num] = cur_max_value; return NULL; } int main() { int total_elements = SIZE(arr); int n_threads = 4; struct_max thread_arr[4]; for (int i = 0; i < 4; ++i) { thread_arr[i].thread_num = i + 1; thread_arr[i].start = i * 4; thread_arr[i].end = thread_arr[i].start + 4; } pthread_t threads[4]; for (int i = 0; i < 4; ++i) { pthread_create(&threads[i], NULL, thread_fun, &thread_arr[i]); } for (int i = 0; i < 4; ++i) { pthread_join(threads[i], NULL); } int final_max_val = max_values_from_threds[0]; for (int i = 0; i < n_threads; ++i) { if (max_values_from_threds[i] > final_max_val) { final_max_val = max_values_from_threds[i]; } } printf("Maximum value = %d\n", final_max_val); return 0; }আউটপুট
প্রোগ্রামটি কম্পাইল ও এক্সিকিউট করলে নিচের আউটপুট পাওয়া যাবে −
Maximum value = 1673