কম্পিউটার

C++ এ pthreads ব্যবহার করে একটি খুব বড় অ্যারেতে সর্বাধিক উপাদান


সমস্যা বিবৃতি

পূর্ণসংখ্যার একটি খুব বড় অ্যারে দেওয়া, মাল্টিথ্রেডিং ব্যবহার করে অ্যারের মধ্যে সর্বাধিক খুঁজুন

উদাহরণ

যদি ইনপুট অ্যারে হয় {10, 14, -10, 8, 25, 46, 85, 1673, 63, 65, 93, 101, 125, 50, 73, 548} তাহলে

এই অ্যারেতে সর্বাধিক উপাদান হল 1673

অ্যালগরিদম

  • আসুন আমরা অ্যারের আকারকে মোট_এলিমেন্ট হিসাবে কল করি
  • N থ্রেড তৈরি করুন
  • প্রতিটি থ্রেড (total_elementes/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

  1. C++ এ মিন হিপে সর্বাধিক উপাদান

  2. কিভাবে C++ এ STL ব্যবহার করে একটি অ্যারের সর্বোচ্চ উপাদান খুঁজে পাবেন?

  3. STL ব্যবহার করে C++ এ অ্যারে পণ্য

  4. বাইনারি অনুসন্ধান ব্যবহার করে একটি অ্যারেতে সর্বাধিক উপাদান খুঁজে পেতে C++ প্রোগ্রাম