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;
}

 

 此時,線程中的指針與參數指針指向同一地址。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM