Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में pthreads का उपयोग करके बहुत बड़े ऐरे में अधिकतम तत्व


समस्या कथन

बहुत बड़े पूर्णांक ऐरे दिए गए हैं, मल्टीथ्रेडिंग का उपयोग करके ऐरे में अधिकतम तत्व ढूंढें

उदाहरण

यदि इनपुट ऐरे {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

  1. - C++ में STL का उपयोग करके सरणी का अधिकतम तत्व कैसे ज्ञात करें?

    यहां हम देखेंगे कि अधिकतम तत्व कैसे ज्ञात करें। इसलिए यदि सरणी [12, 45, 74, 32, 66, 96, 21, 32, 27] की तरह है, तो अधिकतम तत्व 96 है। हम algorithm.h हेडर फ़ाइल में मौजूद max_element() फ़ंक्शन का उपयोग करके अधिकतम तत्व प्राप्त कर सकते हैं। उदाहरण #include<iostream> #include<algorithm> usin

  1. - C++ STL का उपयोग करके ऐरे का गुणनफल

    यह ऐरे गुणनफल ज्ञात करने के लिए C++ प्रोग्राम का एक उदाहरण है। एल्गोरिदम Begin ऐरे के मान इनिशियलाइज़ करें। ऐरे का गुणनफल लौटाने के लिए उपयोगकर्ता परिभाषित फंक्शन accumulate को कॉल करें। समाधान प्रिंट करें। End. उदाहरण कोड #include <iostream> #include <numeric> using names

  1. - बाइनरी सर्च का उपयोग करके सरणी में अधिकतम एलिमेंट खोजने के लिए C++ प्रोग्राम

    यह बाइनरी सर्च ट्री का उपयोग करके सरणी के अधिकतम एलिमेंट को खोजने के लिए एक C++ प्रोग्राम है। इस प्रोग्राम की समय जटिलता O(log n) है। एल्गोरिदम शुरुआत दिए गए डेटा एलिमेंट्स का उपयोग करके बाइनरी सर्च ट्री बनाएं। अगला रूट पॉइंटर को दाएं सबसे चाइल्ड नोड पर ट्रैवर्स करें। नोड के डेटा भाग को दिए गए डेटा