zoukankan      html  css  js  c++  java
  • 37.并行计算汇总

     1 #define _CRT_SECURE_NO_WARNINGS
     2 #include <iostream>
     3 #include <thread>
     4 #include <future>
     5 #include <vector>
     6 #include <cstdlib>
     7 #include <mutex>
     8 using namespace std;
     9 #define COUNT 1000000
    10 
    11 //创建互斥量
    12 mutex m;
    13 
    14 //多线程计算加法
    15 int add(vector<int> *arr,int start,int count)
    16 {
    17     static mutex m;//只会初始化一次
    18     int sum(0);//保存结果
    19     for (int i = 0; i < count; i++)
    20     {
    21         sum += (*arr)[start + i];
    22     }
    23     {
    24         //锁定,离开作用区域,自动释放
    25         lock_guard<mutex> lckg(m);
    26         cout << "thread=" << this_thread::get_id()
    27             << ",count=" << count
    28             << ",sum=" << sum << endl;
    29     }
    30     return sum;
    31 }
    32 
    33 void main()
    34 {
    35     vector <int>data(COUNT);//数组,100万个数据
    36     for (int i = 0; i < COUNT; i++)
    37     {
    38         data[i] = (i + 1) % 1000;// 赋值初始化
    39     }
    40 
    41     vector<future<int>> result;//结果数组,存放结果
    42 
    43     int cpus = thread::hardware_concurrency();//CPU核心的个数
    44 
    45     for (int i = 0; i < cpus * 2; i++)
    46     {
    47         int batch_each = COUNT / (cpus * 2);
    48         //最后一个线程所计算的个数
    49         if (i == (cpus * 2) - 1)
    50         {
    51             batch_each = COUNT - COUNT / (cpus * 2)*i;
    52         }
    53         //不断压入结果
    54         result.push_back(async(add, &data, i*batch_each, batch_each));
    55         //async直接返回future类型结果
    56     }
    57 
    58     //汇总
    59     int lastresult(0);
    60     for (int i = 0;i<result.size();i++)
    61     {
    62         lastresult += result[i].get();//汇总结果
    63     }
    64     cout << "结果=" << lastresult << endl;
    65     
    66     cin.get();
    67 }
  • 相关阅读:
    理解AJAX工作原理 构建网站的有效方法()
    吃大亏的SQL
    Global
    jQuery插件jTemplates(模板
    distinct吃亏记
    事件和委托的编译代码
    星期划分
    理解AJAX工作原理 构建网站的有效方法(5)
    理解AJAX工作原理 构建网站的有效方法(2)
    我比较笨系列2.《委托》将方法绑定到委托
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8549510.html
Copyright © 2011-2022 走看看