C++ 并发编程2 --向线程函数传递参数

1向线程函数传递参数比较简单,一般的形式如下

void f(int i,std::string const& s);

std::thread t(f,3, "hello");

但仍然有一些特殊情况,有时换我们想传递一些引用,但是发现我们传递的对象是对象的拷贝而不是对象本身,如下所示

void update_data_for_widget(widget_id w,widget_data& data); // 1

void oops_again(widget_id w)

{

widget_data data;

std::thread t(update_data_for_widget,w,data); // 2

display_status();

t.join();

process_widget_data(data); // 3

}

这里就要注意2启动的新进程中传递的参数并不是参数本身,而是参数的拷贝,如果我们向传递参数本身的话,要这么写

std::thread t(update_data_for_widget,w,std::ref(data))

class X

{

public:

void do_lengthy_work();

};

X my_x;

std::thread t(&X::do_lengthy_work,&my_x); // 1

在这段代码中,将my_x.do_lengthy_work作为线程函数,my_x的地址1作为指针对象提供给函数,如果函数有参数的话可以为成员函数提供参数: std::thread 构造函数的第三个参数就是成员函数

的第一个参数,以此类推。

class X

{

public:

void do_lengthy_work(int num);

};

X my_x;

std::thread t(&X::do_lengthy_work,&my_x,num); // 1