
这里我们将看到如何使用多线程环境执行矩阵加法和减法。 pthread用于在C或C++中同时执行多个线程。
有两个矩阵A和B。每个矩阵的阶数为(m x n)。每个线程将获取每一行,并执行加法或减法。因此,对于 m 行,有 m 个不同的线程。
#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
以上就是使用pthread在C/C++中实现矩阵的加法和减法的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号