无法在std :: thread中传递1D数组

时间:2015-01-14 21:03:30

标签: c++ arrays multithreading c++11

这是我的实际项目,但我做了一个最小的例子(代码基于Orbit中Lightness Races的一个例子)。

#include <thread>
#include <iostream>

class Foo
{
    Foo(int n = 10)
    {
        size_t a[n];
        constexpr int p = 5;
        std::thread threads[p];
        for (int i = 0; i < p; ++i)
            threads[i] = std::thread(std::bind(&Foo::bar, this, a, n));

        for (auto& th : threads) th.join();
    }

    void bar(size_t* a, int n) {}
};

int main() {std::cout << "ok\n";}

Live On Coliru

错误来自于我使用的数组大小为n。但是,在真正的项目中,我很难改变这一点,因为许多代码行都基于此。

1 个答案:

答案 0 :(得分:7)

使用矢量

或者通过在类型演绎发生之前将数组衰减为指针来解决问题:

std::bind(&Foo::bar, this, +a, n)

问题是,bind是推断数组引用,然后尝试复制它/按值/。该语言未指定数组副本。