समस्या कथन
पूर्णांकों की एक बहुत बड़ी सरणी को देखते हुए, मल्टीथ्रेडिंग का उपयोग करके सरणी के भीतर अधिकतम खोजें
उदाहरण
अगर इनपुट ऐरे {10, 14, -10, 8, 25, 46, 85, 1673, 63, 65, 93, 101, 125, 50, 73, 548} है तो
इस सरणी में अधिकतम तत्व 1673 है
एल्गोरिदम
- आइए हम सरणी आकार को Total_elements कहते हैं
- एन थ्रेड बनाएं
- प्रत्येक थ्रेड (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