为什么我不能使用std :: thread通过引用发送对象

时间:2015-11-24 13:35:32

标签: c++ multithreading reference

我的代码是这样的: -

#include <iostream>
#include <thread>
using namespace std;
void swapno (int &a, int &b)
{
    int temp=a;
    a=b;
    b=temp;
}
int main()
{
    int x=5, y=7;
    cout << "x = " << x << "\ty = " << y << "\n";
    thread t (swapno, x, y);
    t.join();
    cout << "x = " << x << "\ty = " << y << "\n";
    return 0;
}

此代码无法编译。任何人都可以帮我解释原因吗? 不仅此代码而且this中的代码也无法通过引用发送std::unique_ptrstd::thread出了什么问题?

2 个答案:

答案 0 :(得分:8)

问题是std::thread 复制其参数并在内部存储它们。如果要通过引用传递参数,则需要使用std::refstd::cref函数来创建引用包装。

thread t (swapno, std::ref(x), std::ref(y));

答案 1 :(得分:1)

你可以这样做,而不是:

    #include <iostream>
    #include <thread>
    void swapno (int *a, int *b)
    {
        int temp=*a;
        *a=*b;
        *b=temp;
    }
    int main()
    {
        int x = 5, y = 7;
        std::cout << "x = " << x << "\ty = " << y << "\n";
        std::thread t (swapno, &x, &y);
        t.join();
        std::cout << "x = " << x << "\ty = " << y << "\n";
        return 0;
    }

你应该得到相同的结果;)