【发布时间】: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