多线程并行计算数据总和 —— 优化计算思想(多线程去计算)——

多线程计算整型数组数据总和:

#include <stdio.h>#include <stdlib.h>#include <Windows.h>#include<process.h>#include <time.h>#define N 1024struct Myinfo{    int *pstart;//开始地址    int length;//长度    int id;//线程编号    int sum;//存储数据的和};void  add(void *p) //void *p可以保存任何类型的指针{    struct Myinfo *pinfo = p;    for (int i = 0; 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] = { 0 };   // 进行赋值    for (int i = 0; i < N; i++)    {        data[i] = rand() % 1000;        //printf("%4d", data[i] = rand() % 1000);    }    int sum = 0;   //计算总和    for (int i = 0; i < N; i++)    {        sum += data[i];    }    printf("\n总和=%d", sum);    struct Myinfo info[8] = { 0 };    for (int i = 0; i < 8;i++)    {        info[i].id = i;        info[i].length = N / 8;        info[i].sum = 0;        info[i].pstart = data + i*N / 8; //注意这里地址的移动        _beginthread(add, 0, &info[i]);    }    system("pause");    int lastsum=0;    for (int i = 0; i < 8;i++)    {        lastsum += info[i].sum;    }    printf("\n多线程总和=%d", lastsum);    system("pause");}

在此也可以结合队列来使用,队列控制取到的计算点

如果可以,我真想和你一直旅行。或许是某个未开发的荒凉小岛,

多线程并行计算数据总和 —— 优化计算思想(多线程去计算)——

相关文章:

你感兴趣的文章:

标签云: