确保线程执行函数体正确使用引用传递

1、前言
    在启动一个线程时,我们首先需要定义一个线程执行体,这个可执行体可以是函数、仿函数或者lambda表达式。并且它们可以拥有任意数量的参数。如,
   
 auto thHandler = std::thread([](){cout << "a new thread" << endl;});

    以上一行代码运行时,会启动一个新的线程,线程的执行体为一个lambda表达式,这个线程会在控制台中高输出“a new thread“。以上的示例中,lambda没有参数,但是实际上线程执行体可以有任意个参数,而我们知道参数传递有引用传递、指针传递以及按值传递之分。通常,在传对象时一般建议使用引用传递,但是我们有必要知道如何正确的在线程执行体中使用引用传递。

2、参数采用引用传递的效果
    在继续之前,我们先来看看采用引用传递方式的效果,如以下代码:
void changeName(string & strOldName, const string& strNewName)
{
 cout << "Name passed in: " << strOldName << endl;
 strOldName = strNewName;
 cout << "Now name changed to : " << strOldName << endl;
}

int main()
{
 string strName("old name");
 auto thHandler = std::thread(changeName, strName, "new name");
 thHandler.join();
 cout << "After name changed in thread, now become : " << strName << endl;
 
 return 0;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值