Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C/C++ में pthreads का उपयोग करके मैट्रिक्स का जोड़ और घटाव

यहां हम देखेंगे कि मल्टीथ्रेडेड वातावरण का उपयोग करके मैट्रिक्स जोड़ और घटाव कैसे करें। pthread का उपयोग C या C++ में एक साथ कई थ्रेड्स को निष्पादित करने के लिए किया जाता है।

दो आव्यूह A और B हैं। प्रत्येक आव्यूह का क्रम (m x n) है। प्रत्येक धागा प्रत्येक पंक्ति को लेगा, और जोड़ या घटाव करेगा। तो एम पंक्तियों के लिए, एम अलग-अलग धागे हैं।

उदाहरण

#include<iostream>
#include <pthread.h>
#include <cstdlib>
#include <cstdint>
#define CORE 3
#define MAX 3
using namespace std;
int AMat[MAX][MAX] = {{10, 20, 30},
   {40, 50, 60},
   {70, 80, 50}
};
int BMat[MAX][MAX] = {{80, 60, 20},
   {30, 20, 15},
   {10, 14, 35}
};
pthread_t thread[CORE * 2];
int add[MAX][MAX], sub[MAX][MAX];
void* addMatrices(void* arg) {
   intptr_t core = (intptr_t)arg;
   // Each thread computes 1/3rd of matrix addition
   for (int i = core * MAX / 3; i < (core + 1) * MAX / 3; i++) {
      for (int j = 0; j < MAX; j++) {
         add[i][j] = AMat[i][j] + BMat[i][j];
      }
   }
}
void* subtraction(void* arg) {
   intptr_t core = (intptr_t)arg;
   // Each thread computes 1/3rd of matrix subtraction
   for (int i = core * MAX / 3; i < (core + 1) * MAX / 3; i++) {
      for (int j = 0; j < MAX; j++) {
         sub[i][j] = AMat[i][j] - BMat[i][j];
      }
   }
}
void display(){
   cout << "Matrix A: " << endl;
   for(int i = 0; i < MAX; i++) {
      for(int j = 0; j < MAX; j++) {
         cout << AMat[i][j] << " ";
      }
      cout << endl;
   }
   cout << "\nMatrix B: " << endl;
   for(int i = 0; i < MAX; i++) {
      for(int j = 0; j < MAX; j++) {
         cout << BMat[i][j] << " ";
      }
      cout << endl;
   }
}
void displayRes(){
   cout << "\nAddition: " << endl;
   for(int i = 0; i < MAX; i++) {
      for(int j = 0; j < MAX; j++) {
         cout << add[i][j] << " ";
      }
      cout << endl;
   }
   cout << "\nSubtraction: " << endl;
   for(int i = 0; i < MAX; i++) {
      for(int j = 0; j < MAX; j++) {
         cout << sub[i][j] << " ";
      }
      cout << endl;
   }
}
main() {
   display();
   int step = 0;
   for (int i = 0; i < CORE; i++) {
      pthread_create(&thread[i], NULL, &addMatrices, (void*)step);
      pthread_create(&thread[i + CORE], NULL, &subtraction, (void*)step);
      step++;
   }
   for (int i = 0; i < CORE * 2; i++) {
      pthread_join(thread[i], NULL);
   }
   displayRes();
}

आउटपुट

Matrix A:
10 20 30
40 50 60
70 80 50
Matrix B:
80 60 20
30 20 15
10 14 35
Addition:
90 80 50
70 70 75
80 94 85
Subtraction:
-70 -40 10
10 30 45
60 66 15

  1. सी/सी++ में strdup() और strdndup()

    strdup() स्ट्रिंग को डुप्लिकेट करने के लिए फ़ंक्शन strdup () का उपयोग किया जाता है। यह नल-टर्मिनेटेड बाइट स्ट्रिंग के लिए एक पॉइंटर लौटाता है। यहाँ C भाषा में strdup() का सिंटैक्स दिया गया है, char *strdup(const char *string); सी भाषा में strdup() का एक उदाहरण यहां दिया गया है, उदाहरण #include &l

  1. C++ प्रोग्राम एड्रेस द्वारा फंक्शन कॉल का उपयोग करके जोड़ और घटाव खोजने के लिए

    मान लीजिए कि हमारे पास दो संख्याएँ a और b हैं। हमें एक ऐसा फलन परिभाषित करना होगा जो (a + b) और (a - b) दोनों की गणना कर सके। लेकिन C++ में किसी फ़ंक्शन का उपयोग करके, हम अधिकतम एक मान पर वापस आ सकते हैं। एक से अधिक आउटपुट खोजने के लिए, हम पॉइंटर्स का उपयोग करके फ़ंक्शन तर्कों में आउटपुट पैरामीटर का

  1. C++ . का उपयोग करके 0, 1 और 2 के सरणियों को क्रमबद्ध करें

    0, 1, और 2 की एक सरणी को देखते हुए, तत्वों को इस क्रम में क्रमबद्ध करें कि सभी शून्य पहले 1 से पहले और सभी 2 अंत में आएं। हमें सरणी के सभी तत्वों को जगह में क्रमबद्ध करना होगा। हम डीएनएफ (डच राष्ट्रीय ध्वज) सॉर्टिंग एल्गोरिदम का उपयोग करके इस समस्या को हल कर सकते हैं। उदाहरण के लिए, इनपुट-1 - arr[