在多线程程序中detach的使用引发的问题

创建临时对象为线程参数

用detach时,子线程引用主函数中的参数会引发很多问题,例如:变量还没有复制到子线程中就已经被收回。

  • 若传递int这种简单类型参数,建议是值传递,必要用引用和指针,避免界外生枝。
  • 如果传递类对象,避免隐式类型转换。全部在创建线程这一行构建出临时对象来,然后在函数参数里,用引用来接,否者会多构造一次对象。

建议不适用detach(),只使用join():这样就不会出现局部变量失效导致的线程对非法内存的引用。

#include<iostream>
#include<thread>

using namespace std;


class A
{
public:
	int a;
	A(int ai) :a(ai)
	{
		cout << "我是构造函数" << "线程id:" << std::this_thread::get_id() << endl;
	}
	A(const A &a)
	{
		cout << "我是拷贝构造函数" << "线程id:" << std::this_thread::get_id() << endl;
	}
	~A()
	{
		cout << "我是析构函数" << "线程id:" << std::this_thread::get_id() << endl;
	}
};
void myfunc(int i,A &a)//用引用接
{
	
	cout << "myfunc函数执行" << "线程id:" <<
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值