矩阵乘法的多线程实现

这篇博客介绍了如何利用多线程来实现矩阵乘法。作者在主线程中循环创建子线程,每个子线程负责计算结果矩阵的一个位置。通过`DWORD WINAPI myThread(LPVOID argv)`作为线程入口函数,利用`CreateThread`创建线程,并通过`WaitForMultipleObjects`确保主线程等待所有子线程执行完毕后再继续,以避免数据不一致的问题。
摘要由CSDN通过智能技术生成

先前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);
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值