gpt4 book ai didi

c - C 中的多线程矩阵乘法

转载 作者:行者123 更新时间:2023-11-30 19:35:25 25 4
gpt4 key购买 nike

我正在 Linux 上用 C 语言进行矩阵乘法,特别是使用 pthread。这是我的代码。它无法运行,只打印一次空矩阵并表示段错误。谁能指出错误吗?谢谢。

#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>

#define NUM_THREADS 9
int A[3][3] = {{2,5,6},{2,12,10},{6,1,8}};
int B[3][3] = {{7,5,1},{17,0,13},{3,2,5}};
int answer[3][3]={0};

void *multiply (void *param);
void print_matrix (int m[3][3]);

void print_matrix (int m[3][3]) {
int i, j;
for (i = 0; i < 3; i++) {

for (j = 0; j < 3; j++)
printf("%d\t ", m[i][j]);
printf("\n");
}
}

void *multiply (void *param) {
int i, j, k;
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
for(k = 0; k < 3; k++)
{
answer[i][j] += A[i][k] * B[k][j];
}
}
}
pthread_exit(NULL);
}

int main()
{
pthread_t tid[NUM_THREADS];
int i, j;
for (i = 0; i < NUM_THREADS; i++) {
pthread_attr_t attr; /* set of attributes for the thread */
pthread_attr_init(&attr);/* get the default attributes */
pthread_create(&tid[i],&attr,multiply,NULL);
}

for (j = 0; j < NUM_THREADS; j++) {
pthread_join(tid[i],NULL);
print_matrix(answer);
}


}

最佳答案

您同时运行所有 9 个线程,它们访问相同的全局变量。这可能会产生问题。尝试在调用线程后施加一个小的时间延迟。 sleep(1); 可以解决这个问题。或者使用诸如互斥体/信号量之类的机制

关于c - C 中的多线程矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42685214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com