C++ 11 笔记 (五) : std::thread
这真是一个巨大的话题。我猜记录完善绝B需要一本书的容量。
所以。。我只是略有了解,等以后用的深入了再慢慢补充吧。
C++写多线程真是一个痛苦的事情,当初用过C语言的CreateThread,见过boost库的pthread,对比一下感觉Java和C#的多线程真好用。。
在C++11中,标准库又添加了std::thread这个好用的线程库,基本就是boost的pthread演化来的,用法也差不多。所以先举个简单的例子:
void func1(std::string str)
{
for (int i = ; i < ; i++)
{
std::cout << str << std::endl;
}
} void func2()
{
for (int i = ; i < ; i++)
{
std::cout << "BBB" << std::endl;
}
} int main()
{
std::thread t1(func1, "AAA");
std::thread t2(func2);
t1.join();
t2.join();
return ;
}
这样就会同时输出“AAA”和“BBB”了。
另外,t1还可以写成这样:
std::thread t1(std::bind(func1, "AAA"));
当然,还可以这样:
std::thread t2([]{
for (int i = ; i < ; i++)
{
std::cout << "BBB" << std::endl;
}
});
跟大多数语言一样,join是等待子线程结束,主线程会阻塞。相对应的还有detach,作用是托管线程,跟主线程各自执行。
还有两个常用的成员函数:
get_id ——获取线程 ID。
joinable ——检查线程是否可被 join。
还有互斥量,直译就可以了:
mutex 互斥量
timed_mutex 超时互斥量
recursive_mutex 递归互斥量
recursive_timed_mutex 递归超时互斥量
互斥量的常用成员函数:
lock 获取锁
trylock 尝试获取锁
unlock 释放锁
try_lock_for 在一定时间范围内尝试获取锁(有超时功能的mutex才能用)
try_lock_until 尝试获取锁到某个时间点位置(有超时功能的mutex才能用)
类似Java的Lock类和C#的lock。
C++ 11 笔记 (五) : std::thread的更多相关文章
- C++11并发之std::thread<转>
最近技术上没什么大的收获,也是悲催的路过~ 搞一点新东西压压惊吧! C++11并发之std::thread 知识链接: C++11 并发之std::mutex C++11 并发之std::atomic ...
- C++11 并发指南------std::thread 详解
参考: https://github.com/forhappy/Cplusplus-Concurrency-In-Practice/blob/master/zh/chapter3-Thread/Int ...
- C++11并发——多线程std::thread (一)
https://www.cnblogs.com/haippy/p/3284540.html 与 C++11 多线程相关的头文件 C++11 新标准中引入了四个头文件来支持多线程编程,他们分别是< ...
- c++11并发之std::thread
知识链接: https://www.cnblogs.com/lidabo/p/7852033.html 构造函数如下: ) thread() noexcept; initialization() te ...
- c++11中关于std::thread的join的思考
c++中关于std::thread的join的思考 std::thread是c++11新引入的线程标准库,通过其可以方便的编写与平台无关的多线程程序,虽然对比针对平台来定制化多线程库会使性能达到最大, ...
- C++11 并发之std::thread std::mutex
https://www.cnblogs.com/whlook/p/6573659.html (https://www.cnblogs.com/lidabo/p/7852033.html) C++:线程 ...
- c++11中关于`std::thread`线程传参的思考
关于std::thread线程传参的思考 最重要要记住的一点是:参数要拷贝到线程独立内存中,不管是普通类型.还是引用类型. 对于传递参数是引用类型,需要注意: 1.当指向动态变量的指针(char *) ...
- C++11并发之std::mutex
知识链接: C++11并发之std::thread 本文概要: 1. 头文件. 2.std::mutex. 3.std::recursive_mutex. 4.std::time_mutex. 5 ...
- C++11 并发指南五(std::condition_variable 详解)
前面三讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三(std::mutex 详解)>分别介绍了 std::thread,std::mut ...
随机推荐
- MySQL批处理SQL语句
MySQL 支持批处理的模式运行一批SQL语句,以下的样例就是实验MySQL怎样在windows下批处理运行SQL语句. create table test(id int,name varchar(2 ...
- \\ip 映射 指定的网络名不再可用
问题:\\ip 映射 指定的网络名不再可用 解决方法:服务器端打开服务列表 services.msc 启动两个进程 1.Computer Browser 2. Workstation 就正常了~~ ...
- php连接oracle数据库(linux)(转)
php连接访问Oracle是用过oci函数,以下是整理的文档 1.安装Apache和php包 yum install -y httpd php* 2.下载Oracle组件 oracle-instant ...
- mysql.cnf 配制文件详解
代码如下: [client]port = 3306socket = /tmp/mysql.sock [mysqld]port = 3306socket = /tmp/mysql.sock basedi ...
- 动态使用webservice,以及含有ref类型的参数的问题
public class WSHelper { /// < summary> /// 动态调用web服务 /// < /summary> /// < param name ...
- (转)常用CSS优化总结——网络性能与语法性能建议
原文地址:http://www.cnblogs.com/dolphinX/p/3508657.html 在前端面试中最常见的问题就是页面优化和缓存(貌似也是页面优化),被问了几次后心虚的不行,平然平时 ...
- JS插件-日期
原文出处 源码下载 原文出处 源码下载
- C#类和成员定义
1 定义类 C#用关键字class来定义类.默认情况下,类声明为内部(internal)的,即只有当前项目中的代码才能访问它.与之相对应的,还可以用public关键字来修饰,这样该类还可以由其 ...
- MediaPlayer SeekTo 不准确的解决方案
接上篇文章,最近做视频背景的游戏. 需要使用安卓的meidaplayer来播放视频,并跳转. 跳转时发现,有些视频可以跳到位置上,有些不行. GG了好久,可以使用FFMPEG这个工具重新转一次.并加上 ...
- 实战突击: Java Web项目整合开发(PDF)
实战突击: Java Web项目整合开发(PDF)