多线程并行计算数据总和 —— 优化计算思想(多线程去计算)—— C语言demo
2024-08-26 17:11:06
多线程计算整型数组数据总和:
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include<process.h>
#include <time.h>
#define N 1024 struct Myinfo
{
int *pstart;//开始地址
int length;//长度
int id;//线程编号
int sum;//存储数据的和
};
void add(void *p) //void *p可以保存任何类型的指针
{
struct Myinfo *pinfo = p;
for (int i = ; i < pinfo->length;i++)
{
pinfo->sum += pinfo->pstart[i];
}
printf("\n线程%d计算的结果%d", pinfo->id, pinfo->sum);
} void main()
{
time_t ts;
unsigned int num = time(&ts);//传递地址
srand(num);
int data[N] = { };
// 进行赋值
for (int i = ; i < N; i++)
{
data[i] = rand() % ;
//printf("%4d", data[i] = rand() % 1000);
}
int sum = ;
//计算总和
for (int i = ; i < N; i++)
{
sum += data[i];
}
printf("\n总和=%d", sum); struct Myinfo info[] = { };
for (int i = ; i < ;i++)
{
info[i].id = i;
info[i].length = N / ;
info[i].sum = ;
info[i].pstart = data + i*N / ; //注意这里地址的移动
_beginthread(add, , &info[i]);
}
system("pause"); int lastsum=;
for (int i = ; i < ;i++)
{
lastsum += info[i].sum;
}
printf("\n多线程总和=%d", lastsum);
system("pause");
}
在此也可以结合队列来使用,队列控制取到的计算点
最新文章
- Oracle 如何扩展表空间
- “Win10 UAP 开发系列”之 在MVVM模式中控制ListView滚动位置
- java中的substring用法
- Android ServiceConnection类的onServiceDisconnected(ComponentName name)在什么时候执行
- Robot Framework自动化测试---元素定位
- Cocoapod安装使用和常见问题(转载)
- &;简单使用记录
- Angularjs^1.2.9 搜索关键字高亮显示
- Andrew Ng机器学习课程笔记--week1(机器学习介绍及线性回归)
- XML解析【介绍、DOM、SAX详细说明、jaxp、dom4j、XPATH】
- Android OnLowMemory和OnTrimMemory
- (原创)ubuntu 10.04+ruby1.9.2+rails3 安装记录
- 2019-2-14SQLserver中function函数和存储过程、触发器、CURSOR
- java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
- 纯小白入手 vue3.0 CLI - 3.3 - 路由的导航守卫
- 在Vue项目中使用vw实现移动端适配
- 221. 链表求和 II
- SMGP关键代码
- 字符编码_Windows资料
- 主机批量扫描工具fping,hping安装及使用
热门文章
- delphi 实体类 JSON 数组
- win10 修改hosts
- 下拉菜单的实现classList.add() classList.remove() class属性的添加和删除
- Python all() 函数
- Linux下Thunderbird要安装的插件
- 优化 resolv.conf
- VMWare 虚拟机挂载 Homestead NFS 进行老项目(基于 Brophp)维护
- 分布式理论系列(二)一致性算法:2PC 到 3PC 到 Paxos 到 Raft 到 Zab
- net 程序员面试宝典
- 各大主流.Net的IOC框架性能测试比较(转)