使用std :: thread组合来自多个线程的数组

乔恩

我正在用C ++写一个蒙特卡洛程序,并且正在使用std :: thread划分线程之间要跟踪的历史记录数量。但是,这是我第一次尝试多线程,并且遇到了一个问题,希望该简化的代码可以让我进行演示,以期能从本站点的读者那里获得一些建议。在这个简化的问题中,我将调用求和函数,该函数将生成具有2个线程的1X5维随机数数组。当线程返回它们的值时(由于它是一个全局变量而没有真正返回),则主程序将具有两个5维数组,每个数组对应于一个不同的线程。我想将两个数组合并成一个数组,最后一个数组中的元素,对应于由不同线程产生的两个数组中相同元素的总和。不幸的是,每个线程中的数组具有相同的名称,因此我不能简单地将两个不同的数组加在一起。建议使用哪些方法将两个1X5维数组组合为一个单个求和数组,并使用与每个线程中相同元素之和相对应的元素?

#include <iostream>
#include <vector>
#include <thread>
#include <mutex>
#include <cassert>
#include "boost/multi_array.hpp"

std::vector<float> Array;
std::mutex Array_mutex;

void Summation(int sample_size)
{
    std::lock_guard<std::mutex> guard(Array_mutex);
    for(int i = 0; i < sample_size; i++)
    {
        Array.push_back(rand() % 10 + 1);
    }
    std::cout << "\n";
}

int main(int argc, const char * argv[]) {
    int sample_size = 10;
    int Num_Threads = 2;
    int number_count = sample_size/Num_Threads;
    srand(time(NULL));
    std::vector<std::thread> Threads;
    for(int i = 0; i < Num_Threads; i++)
    {
        Threads.push_back(std::thread(Summation,number_count));
    }

    for(int i = 0; i < Num_Threads; i++)
    {
        Threads[i].join();
    }

    // - I would like to combine the arrays produced from each thread into a
    //   single array, where each element in the final array is the sum of
    //   the identical element in the array from each thread

    // i.e. Element 1(final) = Element 1(thread 1) + Element 1(thread2)
    //      Element 2(final) = Element 2(thread 1) + Element 2(thread2)
    //      Element 3(final) = Element 3(thread 1) + Element 3(thread2)

    return 0;
}
一些程序员哥们

如果每个线程需要一个向量,则实际上每个线程需要一个向量就像向量的向量。

对于一个简单而幼稚的解决方案,类似

#include <iostream>
#include <array>
#include <random>
#include <thread>

void generate(const size_t size, std::array<float>& values)
{
    // Pseudo-random number generation stuff
    std::random_device rd;
    std::default_random_engine e1(rd());
    std::uniform_int_distribution<float> uniform_dist(1, 10);

    // Generate some values and add the array
    for (size_t i = 0; i < size; ++i)
        values[i] = uniform_dist(el);
}

int main()
{
    constexpr size_t number_values  = 10;
    constexpr size_t number_threads = 2;

    // An array of arrays, one sub-array per thread
    std::array<std::array<float, number_values>, number_threads>
        values;

    // An array of threads
    std::array<std::thread, number_threads> threads;

    // Create threads
    for (size_t i = 0; i < number_threads; ++i)
        threads[i] = std::thread(generate, number_values, std::ref(values[i]));

    // Wait for threads to finish
    for (size_t i = 0; i < number_threads; ++i)
        threads[i].join();

    // Now "combine" the values into a single array
    std::array<float, number_values> totals;
    for (size_t i = 0; i < number_values; ++i)
    {
        for (size_t j = 0; j < number_threads; ++j)
            totals[i] += values[j][i];
    }

    // Print the values
    for (const size_t i; i < number_values; ++i)
        std::cout << "Value #" << (i + 1) << " = " << totals[i] << '\n';
}

请注意,该代码未经测试,甚至没有经过编译,但应在理论上起作用:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用ffmpeg组合来自多个来源的视频和音频

来自分类Dev

c# 如何使用多线程处理来自多个线程的多个返回值?

来自分类Dev

Qt4 C ++:来自多个线程的QString变量使用崩溃

来自分类Dev

在Entity Framework 6中使用来自多个线程的单个上下文

来自分类Dev

使用来自多个数组的值过滤 JavaScript 对象

来自分类Dev

与来自多个线程的数组的非锁定交互(在 Java 中)

来自分类Dev

来自多个线程的cudaEventSynchronize

来自分类Dev

Excel VBA如何使用来自多个Excel范围的值填充多维(3d)数组?

来自分类Dev

如何使用std :: thread?

来自分类Dev

使用熊猫对来自多个csv文件的数据求和

来自分类常见问题

使用mocha.js加入来自多个文件的测试

来自分类Dev

使用rsync同步来自多个目录的txt文件

来自分类Dev

使用来自多个Fetch API请求的变量

来自分类Dev

如何使用重复键合并来自多个词典的数据?

来自分类Dev

如何使用jq合并来自多个文件的JSON记录

来自分类Dev

使用ALSA和Pulseaudio录制来自多个设备的音频

来自分类Dev

使用来自多个indexeddb对象库的数据

来自分类Dev

MySQL使用连接计数来自多个表的行

来自分类Dev

使用Dictionary metod集成来自多个csv文件的数据

来自分类Dev

使用来自多个模块的回调函数

来自分类Dev

使用来自多个设备的 Dropbox 访问令牌

来自分类Dev

C ++ std :: vector可以同时处理来自多线程的push_back吗?

来自分类Dev

C ++ std :: vector可以同时处理来自多线程的push_back吗?

来自分类Dev

在std :: thread中使用std :: vector

来自分类Dev

std :: thread的线程安全数组?

来自分类Dev

如何生成使用std :: thread C ++调用同一功能的多个线程

来自分类Dev

如何使用std :: thread C ++生成多个调用同一函数的线程

来自分类Dev

来自多个文件的Python多线程

来自分类Dev

同步处理来自多个线程的数据

Related 相关文章

  1. 1

    使用ffmpeg组合来自多个来源的视频和音频

  2. 2

    c# 如何使用多线程处理来自多个线程的多个返回值?

  3. 3

    Qt4 C ++:来自多个线程的QString变量使用崩溃

  4. 4

    在Entity Framework 6中使用来自多个线程的单个上下文

  5. 5

    使用来自多个数组的值过滤 JavaScript 对象

  6. 6

    与来自多个线程的数组的非锁定交互(在 Java 中)

  7. 7

    来自多个线程的cudaEventSynchronize

  8. 8

    Excel VBA如何使用来自多个Excel范围的值填充多维(3d)数组?

  9. 9

    如何使用std :: thread?

  10. 10

    使用熊猫对来自多个csv文件的数据求和

  11. 11

    使用mocha.js加入来自多个文件的测试

  12. 12

    使用rsync同步来自多个目录的txt文件

  13. 13

    使用来自多个Fetch API请求的变量

  14. 14

    如何使用重复键合并来自多个词典的数据?

  15. 15

    如何使用jq合并来自多个文件的JSON记录

  16. 16

    使用ALSA和Pulseaudio录制来自多个设备的音频

  17. 17

    使用来自多个indexeddb对象库的数据

  18. 18

    MySQL使用连接计数来自多个表的行

  19. 19

    使用Dictionary metod集成来自多个csv文件的数据

  20. 20

    使用来自多个模块的回调函数

  21. 21

    使用来自多个设备的 Dropbox 访问令牌

  22. 22

    C ++ std :: vector可以同时处理来自多线程的push_back吗?

  23. 23

    C ++ std :: vector可以同时处理来自多线程的push_back吗?

  24. 24

    在std :: thread中使用std :: vector

  25. 25

    std :: thread的线程安全数组?

  26. 26

    如何生成使用std :: thread C ++调用同一功能的多个线程

  27. 27

    如何使用std :: thread C ++生成多个调用同一函数的线程

  28. 28

    来自多个文件的Python多线程

  29. 29

    同步处理来自多个线程的数据

热门标签

归档