C++11多线程中引用传递问题

C++11多线程中引用传递参数时,不能直接写变量,因为这实际上进行的是值传递,尽管你在定义函数时使用了&来希望是引用传递。

通常,线程中引用传递有两种方法:

1. std::ref(s) 

2. std::move(s)。 不建议,因为运行后,该对象S会在后面就无法使用了。

另外,需要补充的是,线程在创建时,既可以传递函数,也可以传递仿函数(Functor),但在传递仿函数functor时,要注意传参时,应传: (functor()).

具体可参见以下代码:

#ifndef MAIN_CPP
#include<iostream>
#include<thread>
#include<stdlib.h>  //EXIT_SUCCESS
#include <stdio.h> // system(“pause”);
#include<string>
#include "factor.h"
using  namespace std;
void func();
void factor01::operator()(const string& s) {
	func();
	cout << "print s=" <<s<< endl;
}
void func() {

	cout << "www.baidu.com" << endl;
}
int main() {
	factor01 f1;
	//thread t1(f1);
	//thread t1((factor01()));
	const string s="I love China!";
	thread t2((factor01()), std::move(s));  // 引用传递给线程时,有两种方法:1)std::ref(s) 2) std::move(s) -> in POIX, 引用必须用以上进行传参,否则就是值传递。

	try {
		 
	}
	catch (...)//all exceptions
	{
		t2.join();
		throw;
	}
	//t1.join();
	if(t2.joinable())
	    t2.join();
	system("pause");
	return  EXIT_SUCCESS;
}

#endif // !1

 

dd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Poo_Chai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值