【问题标题】:Have trouble understanding * and & when they come with thread [duplicate]无法理解 * 和 & 当它们带有线程时[重复]
【发布时间】:2015-09-11 01:12:02
【问题描述】:

all!我遇到了一些麻烦!函数“change”没有任何改变......

void change(int &a){
    cout << "thread tt \t" << &a << " value:" << a << endl;
    a = 5;
    return;
}

int main()
{
    int a = 4;
    cout << "Thread main \t" << &a << " value:" << a << endl;
    thread tt(change, a);

    tt.join();
    cout << "After join() \t" << &a << " value:" << a << endl;

    return 0;
}

所以,我写了另一个程序来跟踪“a”和“&a”的地址。这是代码。

void change(int &a,int b){
    cout << "thread change \t" << &a << " value:" << a << endl;
    a = b;
    return;
}


void change2(int *a,int b){
    cout << "thread change2 \t" << &a << " value:" << a << endl;
    *a = b;
    return;
}

int main()
{
    int a = 1;

    change(a,2);
    cout << &a << " " << a << endl;
    change2(&a,3);
    cout << &a << " " << a << endl;
    cout << "Thread main \t" << &a << " value:" << a << endl<<endl;


    thread t(change, a,4);
    t.join();
    cout << "After t.join()\t" << &a << " value:" << a << endl;
    cout << &a << " " << a << endl << endl;

    thread tt(change2, &a,5);
    tt.join();
    cout << "After tt.join()\t" << &a << " value:" << a << endl;
    cout << &a << " " << a << endl << endl;

    return 0;
}

结果:

thread change   0038FE98 value:1
0038FE98 2
thread change2  0038FD68 value:0038FE98
0038FE98 3
Thread main     0038FE98 value:3

thread change   0070FAF4 value:3
After t.join()  0038FE98 value:3
0038FE98 3

thread change2  00D0F99C value:0038FE98
After tt.join() 0038FE98 value:5
0038FE98 5

似乎只有当我们将其作为线程运行时,函数“change”才起作用。

我想知道它是否与堆栈有关?

谁能给我一些解释吗?非常感谢..真的让我很痛苦T_T

【问题讨论】:

    标签: c++ multithreading pointers pass-by-reference


    【解决方案1】:

    您遇到的问题是 std::thread 没有引用 a。您可以将astd::ref 包装起来,以获取对线程函数的引用。

    thread tt(change, std::ref(a));
    

    【讨论】:

      猜你喜欢
      • 2011-03-20
      • 2021-12-31
      • 1970-01-01
      • 2017-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      相关资源
      最近更新 更多