先前TA布置了一个作业,让我们用多线程的方式实现矩阵乘法。一开始感觉好像比较麻烦,但是经过了解,其实做起来还是比较简单的。
主要的思路就是在主线程里循环开出子线程分别计算结果矩阵各个位置的值,这里附上代码说明:
//子线程的入口函数
DWORD WINAPI myThread(LPVOID argv){
param* tmp = (param*)argv;
for (int i = 0; i < n; ++ i) {
result[tmp->i][tmp->j] += a[tmp->i][i]*b[i][tmp->j];
}
//在窗口输出结果
printf("第%d个线程计算第C[%d][%d]个元素, 结果为: %d\n",
tmp->num, tmp->i, tmp->j, result[tmp->i][tmp->j]);
return 0;
}
main函数的核心部分:
int num = 1;
//存储子线程的数组
HANDLE* hEven = new HANDLE[m*k];
for (int i = 0; i < m; ++ i) {
for (int j = 0; j < k; ++ j, ++ num) {
param* str_p = new param(i, j, num);
//创建子线程
hEven[num - 1] = CreateThread(NULL,0,myThread,(LPVOID)str_p,0,NULL);