zoukankan      html  css  js  c++  java
  • 多线程并行计算数据总和 —— 优化计算思想(多线程去计算)—— C语言demo

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

    #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 = 0; i < pinfo->length;i++)
        {
            pinfo->sum += pinfo->pstart[i];
        }
        printf("
    线程%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(" 总和=%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(" 多线程总和=%d", lastsum); system("pause"); }

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

  • 相关阅读:
    form表单的应用
    HTML列表及表格的基本应用
    Linux上安装Jdk
    docker+jenkins自动发布步骤及命令
    redis集群部署实战
    mySQL中连接字符串
    mysql触发器
    sql 设置数字长度 不足时补0
    微服务架构特性
    SQLServer2008 去除换行符
  • 原文地址:https://www.cnblogs.com/zhenghongxin/p/6824306.html
Copyright © 2011-2022 走看看