Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

การบวกและลบเมทริกซ์โดยใช้ pthreads ใน C/C++


นี่คือวิธีทำการบวกและลบเมทริกซ์ในสภาพแวดล้อมมัลติเธรด pthread ใช้รันหลายเธรดพร้อมกันใน C หรือ C++

มีเมทริกซ์สองอัน A และ B อันดับของแต่ละเมทริกซ์คือ (m x n) แต่ละเธรดจะรับแต่ละแถว และทำการบวกหรือลบ ดังนั้นสำหรับ m แถว จะมี m เธรดที่ต่างกัน

ตัวอย่างโค้ด C++

#include
#include 
#include 
#include 
#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;
    // แต่ละเธรดคำนวณ 1/3 ของการบวกเมทริกซ์
    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;
    // แต่ละเธรดคำนวณ 1/3 ของการลบเมทริกซ์
    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