C++11并发编程3------线程传参
/*
基本类型传值
*/
#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------线程传参的更多相关文章
- c++11中关于`std::thread`线程传参的思考
关于std::thread线程传参的思考 最重要要记住的一点是:参数要拷贝到线程独立内存中,不管是普通类型.还是引用类型. 对于传递参数是引用类型,需要注意: 1.当指向动态变量的指针(char *) ...
- Java并发编程:线程池的使用
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...
- Java并发编程:线程池的使用(转)
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...
- Java并发编程:线程池的使用(转载)
转载自:https://www.cnblogs.com/dolphin0520/p/3932921.html Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实 ...
- Java并发编程:线程池的使用(转载)
文章出处:http://www.cnblogs.com/dolphin0520/p/3932921.html Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实 ...
- [转]Java并发编程:线程池的使用
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...
- 【转】Java并发编程:线程池的使用
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...
- 13、Java并发编程:线程池的使用
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...
- C++11 并发编程库
C++11 并发编程 C++11 新标准中引入了几个头文件来支持多线程编程,他们分别是: <atomic>:该头文主要声明了两个类, std::atomic 和 std::atomic_f ...
随机推荐
- java ArrayList添加元素全部一样
#开始 今天遇到了一个很神奇的事情 也即是我在用ArrayList的add方法循环加入对象的时候 发现添加的元素全部都是一样的 定位错误定位了一个下午.... 错误位置就是哪一个位置 但是就是不知道为 ...
- 移动端rem屏幕设置
//修改页面title var pageTitle=document.getElementsByTagName("title")[0].innerHTML; if(location ...
- 【PAT甲级】1091 Acute Stroke (30 分)(BFS)
题意: 输入四个正整数M,N,K,T(K<=60,M<=1286,N<=128),代表每片的高度和宽度,片数和最小联通块大小.输出一共有多少个单元满足所在联通块大小大于等于T. tr ...
- html5的canvas2
http://www.cnblogs.com/liugang-vip/p/5360283.html http://www.cnblogs.com/liugang-vip/p/5364292.html ...
- centos7下安装pcre库(pcretest)
在linux下需要对正则表达式的验证,使用的验证工具是pcretest,这个工具集成在pcre库中,下面是安装教程. 安装环境是centos7. 1)首先去官网下载压缩包文件. 其他的source网站 ...
- 在C中测试函数运行时间
#include <stdio.h> #include <time.h> #include <math.h> clock_t start, stop; //cloc ...
- RS232与RS485
1.RS232实物图与引脚图? 2.RS485实物图与引脚图?
- duv中内容不换行的解决办法
<div style='width: 100px;display:block;word-break: break-all;word-wrap: break-word;'> 内容超出div宽 ...
- Deepin-linux下的linux的终端下软件安装和卸载方法
1.方法一: sudo apt update #最好第一步是它 sudo apt install <package_name> --no-upgrade #安装该package但是不升级. ...
- 18 JavaScript字符串方法
indexOf():从头到尾进行检索.返回指定文本在字符串最后一次出现的索引,否则返回-1.可以指定第二个参数作为起始位置. lastIndexOf:从尾到头进行检索.返回指定文本最后出现的位置,否则 ...