<legend id='34Cbh'><style id='34Cbh'><dir id='34Cbh'><q id='34Cbh'></q></dir></style></legend>
    • <bdo id='34Cbh'></bdo><ul id='34Cbh'></ul>
    <tfoot id='34Cbh'></tfoot>
    <i id='34Cbh'><tr id='34Cbh'><dt id='34Cbh'><q id='34Cbh'><span id='34Cbh'><b id='34Cbh'><form id='34Cbh'><ins id='34Cbh'></ins><ul id='34Cbh'></ul><sub id='34Cbh'></sub></form><legend id='34Cbh'></legend><bdo id='34Cbh'><pre id='34Cbh'><center id='34Cbh'></center></pre></bdo></b><th id='34Cbh'></th></span></q></dt></tr></i><div id='34Cbh'><tfoot id='34Cbh'></tfoot><dl id='34Cbh'><fieldset id='34Cbh'></fieldset></dl></div>

      1. <small id='34Cbh'></small><noframes id='34Cbh'>

        我可以创建一个线程安全的 std::atomic<vector<int>> 吗?

        Can I make a thread-safe std::atomiclt;vectorlt;intgt;gt;?(我可以创建一个线程安全的 std::atomicvectorint 吗?)
      2. <legend id='Tjkky'><style id='Tjkky'><dir id='Tjkky'><q id='Tjkky'></q></dir></style></legend>
          <bdo id='Tjkky'></bdo><ul id='Tjkky'></ul>
            <tfoot id='Tjkky'></tfoot>

              <tbody id='Tjkky'></tbody>

            1. <small id='Tjkky'></small><noframes id='Tjkky'>

              <i id='Tjkky'><tr id='Tjkky'><dt id='Tjkky'><q id='Tjkky'><span id='Tjkky'><b id='Tjkky'><form id='Tjkky'><ins id='Tjkky'></ins><ul id='Tjkky'></ul><sub id='Tjkky'></sub></form><legend id='Tjkky'></legend><bdo id='Tjkky'><pre id='Tjkky'><center id='Tjkky'></center></pre></bdo></b><th id='Tjkky'></th></span></q></dt></tr></i><div id='Tjkky'><tfoot id='Tjkky'></tfoot><dl id='Tjkky'><fieldset id='Tjkky'></fieldset></dl></div>

                1. 本文介绍了我可以创建一个线程安全的 std::atomic<vector<int>> 吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我有一个函数需要执行 n=1000 次.这个函数进行蒙特卡罗风格的模拟并返回一个 int 作为结果.我想并行运行 nthreads=4.每当一个线程完成一个循环时,它应该将结果放入std::vector.因此,在 1000 个周期后,我有一个可以通过统计检查的 1000 个 int 向量.

                  I'm having a function that needs to be executed n=1000 times. This functions does a Monte Carlo style simulation and returns an int as the result. I'd like to run nthreads=4 in parallel. Whenever a thread finishes one cycle, it should put the result in a std::vector<int>. Thus, after 1000 cycles, I've a vector of 1000 ints that can be examined by statistics.

                  由于 std::vector 不是线程安全的,我想到了 std::mutex(这肯定会工作).

                  Since a std::vector is not thread-safe, I thought about std::mutex (which would surely work).

                  但是我想知道是否可以将向量声明为原子向量从而绕过互斥锁?是否可以有 std::atomic>?我可以在上面使用 push_back 等吗?

                  But I wonder if I can declare a vector to be atomic and thus get around mutexes? Is it possible to have a std::atomic<std::vector<int>>? And can I use push_back etc. on it?

                  推荐答案

                  你不需要.从多个线程访问 std::vector 是完全可以的,if

                  You don't need to. It is totally okay to access a std::vector from multiple threads, if

                  • 你读取对象
                  • 你写给不同的对象

                  因此,请确保创建一个大小为 n=1000 的向量,并根据您的线程编号(1 到 4)将元素 0-249、250-499 等分配给您的线程.

                  So just make sure, you create a vector of size n=1000 and depending on your thread number (1 to 4) you assign elements 0-249, 250-499 etc. to your threads.

                  所以你的每个线程都会计算 n/nthreads 个元素.

                  So each of your thread computes n/nthreads elements.

                  这篇关于我可以创建一个线程安全的 std::atomic<vector<int>> 吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  Consistent pseudo-random numbers across platforms(跨平台一致的伪随机数)
                  Vary range of uniform_int_distribution(改变uniform_int_distribution的范围)
                  What is a seed in terms of generating a random number?(就生成随机数而言,种子是什么?)
                  Is 1.0 a valid output from std::generate_canonical?(1.0 是 std::generate_canonical 的有效输出吗?)
                  Getting big random numbers in C/C++(在 C/C++ 中获取大随机数)
                  What is the best way to generate random numbers in C++?(在 C++ 中生成随机数的最佳方法是什么?)
                      <tbody id='dSWkL'></tbody>

                      <bdo id='dSWkL'></bdo><ul id='dSWkL'></ul>

                      <small id='dSWkL'></small><noframes id='dSWkL'>

                      <legend id='dSWkL'><style id='dSWkL'><dir id='dSWkL'><q id='dSWkL'></q></dir></style></legend>
                        <tfoot id='dSWkL'></tfoot>

                          • <i id='dSWkL'><tr id='dSWkL'><dt id='dSWkL'><q id='dSWkL'><span id='dSWkL'><b id='dSWkL'><form id='dSWkL'><ins id='dSWkL'></ins><ul id='dSWkL'></ul><sub id='dSWkL'></sub></form><legend id='dSWkL'></legend><bdo id='dSWkL'><pre id='dSWkL'><center id='dSWkL'></center></pre></bdo></b><th id='dSWkL'></th></span></q></dt></tr></i><div id='dSWkL'><tfoot id='dSWkL'></tfoot><dl id='dSWkL'><fieldset id='dSWkL'></fieldset></dl></div>