My first C++ concuurent code:
#include <iostream>
#include <thread>
using namespace std;
void greet() {
cout<<"Hello Concurrent World!";
}
int main(int argc, char* argv[]) {
thread t(greet);
t.join(); //汇合线程,令主线程等待子线程
//t.detach(); 分离线程,让子线程在后台独立运行
return 0;
}
避免thread构造函数将参数转换为右值
对不想被转换为右值的参数套上ref()函数
//example:
void update_data_for_widget(widget_id w, widget_data& data);
void oops_again(widget_id w) {
widget_data data;
thread t(update_data_for_widget, w, ref(data));
display_status();
t.join();
process_widget_data(data);
}
注意update_data_for_widget函数中data参数为引用类型,因而在传实参时为其套上了ref()函数
将成员函数设置为线程函数
C++中若想将某个类的成员函数设置为线程函数,需要传入一个函数指针指向目标成员函数;再传入一个指向该类的示例对象的对象指针。
//example:
class MyObject {
public:
void func() {
cout<<"Do something";
}
};
MyObject mob;
thread t(&MyObject::func, &mob);
转移线程归属权
由于每一个thread实例都负责管控一份执行线程,因而thread实例只能转移归属权,却无法进行复制。
//example:
void func();
thread t1(func);
thread t2 = move(t1); //线程归属权由t1转移至t2
t1 = thread(func); //新开一个线程,并将其归属权转移给t1
5877

被折叠的 条评论
为什么被折叠?



