C++并发(C++11)-03 向线程传递参数
普通传参
#include <iostream> #include <string> #include <thread> using namespace std; void func(string m) { cout << "&m:" << &m; cout << endl; } int main() { string s = "xxxx"; cout << "&s:" << &s << endl; thread t(func, s); t.join(); return 0; }
线程会将参数拷贝后访问
引用传参:常量引用
#include <iostream> #include <string> #include <thread> using namespace std; void func(const string& m) { cout << "&m:" << &m; cout << endl; } int main() { string s = "xxxx"; cout << "&s:" << &s << endl; thread t(func, s); t.join(); return 0; }
线程会将参数拷贝后访问
引用传参:非常量引用
#include <iostream> #include <string> #include <thread> using namespace std; void func(string& m) { cout << "&m:" << &m; cout << endl; } int main() { string s = "xxxx"; cout << "&s:" << &s << endl; thread t(func, ref(s)); t.join(); return 0; }
此时要用到std::ref()将参数转换成引用形式,线程访问的变量与参数变量为同一地址。
指针传参
#include <iostream> #include <string> #include <thread> using namespace std; void func(string* m) { cout << "m:" << m; cout << endl; *m = "yyy"; } int main() { string* s = new string("xxx"); cout << "s:" << s << endl; thread t(func, s); t.join(); cout << "s:" << *s << endl; return 0; }
此时,线程中的指针与参数指针指向同一地址。