/*
基本类型传值
*/
#include <iostream>
#include <thread> void func(int num)
{
num = ;
std::cout << "func: " << num << std::endl;
} int main()
{
int num = ;
std::thread my_job(func, num);
my_job.join(); std::cout << "main: " << num << std::endl;
return ;
}
/*
基本类型传引用
*/
#include <iostream>
#include <thread> void func(int &num)
{
num = ;
std::cout << "func: " << num << std::endl;
} int main()
{
int num = ;
std::thread my_job(func, std::ref(num));
my_job.join(); std::cout << "main: " << num << std::endl;
return ;
}
/*
类类型传值
*/
#include <iostream>
#include <thread> class A
{
public:
int num_;
A(int num) : num_(num)
{
std::cout << "A(int num)" << std::endl;
}
A(const A &a) : num_(a.num_)
{
std::cout << "A(const A &a)" << std::endl;
}
~A()
{
std::cout << "~A()" << std::endl;
}
}; void func(A a)
{
std::cout << "a.num_ = " << a.num_ << std::endl;
a.num_ = ;
} int main()
{
A a();
std::thread my_job(func, a);
my_job.join(); std::cout << "main : a.num_ = " << a.num_ << std::endl;
return ;
}

类类型传值执行结果:多次调用拷贝构造函数,影响效率,所以不推荐这种做法

/*
类类型传引用
*/
#include <iostream>
#include <thread> class A
{
public:
int num_;
A(int num) : num_(num)
{
std::cout << "A(int num)" << std::endl;
}
A(const A &a) : num_(a.num_)
{
std::cout << "A(const A &a)" << std::endl;
}
~A()
{
std::cout << "~A()" << std::endl;
}
}; void func(A &a)
{
std::cout << "a.num_ = " << a.num_ << std::endl;
a.num_ = ;
} int main()
{
A a();
std::thread my_job(func, std::ref(a));
my_job.join(); std::cout << "main : a.num_ = " << a.num_ << std::endl;
return ;
}

如果希望子线程里面不修改对象的内容,形参可加const修饰。

/*
传智能指针
*/
#include <iostream>
#include <thread> void func(std::unique_ptr<int> int_ptr)
{
std::cout << *int_ptr << std::endl;
} int main()
{
std::unique_ptr<int> int_ptr(new int()); std::thread my_job(func, std::move(int_ptr));
my_job.join(); return ;
}

C++11并发编程3------线程传参的更多相关文章

  1. c++11中关于`std::thread`线程传参的思考

    关于std::thread线程传参的思考 最重要要记住的一点是:参数要拷贝到线程独立内存中,不管是普通类型.还是引用类型. 对于传递参数是引用类型,需要注意: 1.当指向动态变量的指针(char *) ...

  2. Java并发编程:线程池的使用

    Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...

  3. Java并发编程:线程池的使用(转)

    Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...

  4. Java并发编程:线程池的使用(转载)

    转载自:https://www.cnblogs.com/dolphin0520/p/3932921.html Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实 ...

  5. Java并发编程:线程池的使用(转载)

    文章出处:http://www.cnblogs.com/dolphin0520/p/3932921.html Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实 ...

  6. [转]Java并发编程:线程池的使用

    Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...

  7. 【转】Java并发编程:线程池的使用

    Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...

  8. 13、Java并发编程:线程池的使用

    Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...

  9. C++11 并发编程库

    C++11 并发编程 C++11 新标准中引入了几个头文件来支持多线程编程,他们分别是: <atomic>:该头文主要声明了两个类, std::atomic 和 std::atomic_f ...

随机推荐

  1. 201771010135 杨蓉庆《面对对象程序设计(java)》第十二周学习总结

    1.实验目的与要求 (1) 掌握Java GUI中框架创建及属性设置中常用类的API: (2) 掌握Java GUI中2D图形绘制常用类的API: (3) 了解Java GUI中2D图形中字体与颜色的 ...

  2. 吴裕雄 python 机器学习——模型选择分类问题性能度量

    import numpy as np import matplotlib.pyplot as plt from sklearn.svm import SVC from sklearn.datasets ...

  3. php.ini修改php上传文件大小限制的方法

    打开php.ini,首先找到file_uploads = on ;是否允许通过HTTP上传文件的开关.默认为ON即是开upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,如果没指定就 ...

  4. Linux下Nginx1.9.9的安装

    1.环境安装 yum install gcc-c++  .yum -y install pcre*.yum -y install openssl* (安装顺序安装) 2.下载压缩包(这里我使用的是老本 ...

  5. python中,字符串前的u,b,r字符的含义

    1.字符串前加 u 例:u"我是含有中文字符组成的字符串." 作用: 后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时 ...

  6. NAT穿透的方式

    目前主要的NAT类型有如下几种: 1)Full-cone NAT, also known as one-to-one NAT 一旦一个内网地址 (iAddr:iPort) 被映射到一个外部地址 (eA ...

  7. 使用电脑热点和Fiddler对Android app进行抓包

    如果没有路由器,怎么对app抓包?如果你的电脑可以开热点的话也可以. 打开Fiddler,菜单栏选择Tools->Options->Connections,勾选Allow remote c ...

  8. 基于PowerCli自动部署和配置vmvare虚拟机

    1 文档说明 2 Vsphere PowerCli安装和配置 3 PowerCli常用命令 4 创建自定义规范 5 虚拟机克隆与配置脚本 6 技术资料 1 文档说明 使用Vsphere管理虚拟机,在进 ...

  9. ES-倒排索引

    一.什么事倒排索引 二.倒排索引为什么查询速度快 (1)ES全文检索的底层是使用倒排索引实现的 (2)倒排索引会将文档的内容进行关键词分词,可以使用关键词直接定位到文档的内容

  10. java之中文乱码处理

    有些时候,比如文件操作的时候,特别是文件中有中文,会规定用GBK格式,这时读写文件,可能会出现中文乱码 资源文件乱码 文件内容乱码 资源文件乱码: 解决: PropertiesUtil proper ...