std::thread(2)
个线程都有一个唯一的 ID 以识别不同的线程,std:thread 类有一个 get_id() 方法返回对应线程的唯一编号,你可以通过 std::this_thread 来访问当前线程实例,下面的例子演示如何使用这个 id:
#include <thread>
#include <iostream>
#include <vector> void hello(){
std::cout << "Hello from thread " << std::this_thread::get_id() << std::endl;
} int main(){
std::vector<std::thread> threads; for(int i = ; i < ; ++i){
threads.push_back(std::thread(hello));
} for(auto& thread : threads){
thread.join();
} return ;
}
依次启动每个线程,然后把它们保存到一个 vector 容器中,程序执行结果是不可预测的,例如: Hello from thread
Hello from thread
Hello from thread
Hello from thread
Hello from thread 也可能是: Hello from thread Hello from thread Hello from thread 139810974787328Hello from thread 139810983180032Hello from thread 或者其他结果,因为多个线程的执行是交错的。你完全没有办法去控制线程的执行顺序(否则那还要线程干吗?)
使用 lambda 启动线程
当线程要执行的代码就一点点,你没必要专门为之创建一个函数,你可以使用 lambda 来定义要执行的代码,因此第一个例子我们可以改写为:
#include <thread>
#include <iostream>
#include <vector> int main(){
std::vector<std::thread> threads; for(int i = ; i < ; ++i){
threads.push_back(std::thread([](){
std::cout << "Hello from thread " << std::this_thread::get_id() << std::endl;
}));
} for(auto& thread : threads){
thread.join();
} return ;
}
在这里我们使用了一个 lambda 表达式替换函数指针,而结果是一样的。
std::thread(2)的更多相关文章
- std::thread
std::shared_ptr<std::thread> m_spThread; m_spThread.reset(new std::thread(std::bind(&GameS ...
- 用std::thread替换实现boost::thread_group
thread_group是boost库中的线程池类,内部使用的是boost::thread. 随着C++ 11标准的制定和各大编译器的新版本的推出(其实主要是VS2012的推出啦……),本着能用标准库 ...
- C++11 并发指南------std::thread 详解
参考: https://github.com/forhappy/Cplusplus-Concurrency-In-Practice/blob/master/zh/chapter3-Thread/Int ...
- C++ 11 笔记 (五) : std::thread
这真是一个巨大的话题.我猜记录完善绝B需要一本书的容量. 所以..我只是略有了解,等以后用的深入了再慢慢补充吧. C++写多线程真是一个痛苦的事情,当初用过C语言的CreateThread,见过boo ...
- Cocos2dx 3.0 过渡篇(二十六)C++11多线程std::thread的简单使用(上)
昨天练车时有一MM与我交替着练,聊了几句话就多了起来,我对她说:"看到前面那俩教练没?老色鬼两枚!整天调戏女学员."她说:"还好啦,这毕竟是他们的乐趣所在,你不认为教练每 ...
- C++11多线程std::thread的简单使用
在cocos2dx 2.0时代,我们使用的是pthread库,是一套用户级线程库,被广泛地使用在跨平台应用上.但在cocos2dx 3.0中并未发现有pthread的支持文件,原来c++11中已经拥有 ...
- Effective Modern C++ Item 37:确保std::thread在销毁时是unjoinable的
下面这段代码,如果调用func,按照C++的标准,程序会被终止(std::terminate) void func() { std::thread t([] { std::chrono::micros ...
- std::thread使用
本文将从以下三个部分介绍C++11标准中的thread类,本文主要内容为: 启动新线程 等待线程与分离线程 线程唯一标识符 1.启动线程 线程再std::threada对象创建时启动.最简单的情况下, ...
- linux每日一练:Enable multithreading to use std::thread: Operation not permitted问题解决
linux每日一练:Enable multithreading to use std::thread: Operation not permitted问题解决 在linux在需要使用c++11时会遇到 ...
- Microsoft C++ 异常: std::system_error std::thread
第一次使用std::thread,把之前项目里面的Windows的thread进行了替换,程序退出的然后发生了std::system_error. 经过调试,发现std::thread ,join了两 ...
随机推荐
- mosquitto ---配置SSL/TLS
在服务器电脑上面创建myCA文件夹, 如在/home/qa/ 文件夹下使用命令, mkdir myCA 然后执行以下命令,我们将创建并使用其他用户没有权限访问的目录. sudo chmod 700cd ...
- python --正则学习
re的正则表达式语法 正则表达式语法表如下: re.match re.match 尝试从字符串的开始匹配一个模式,匹配成功返回match object,否则返回None. 如:下面的例子匹配第一 ...
- 线程间操作无效: 从不是创建控件“txtreceive”的线程访问它。
自己在写串口通信的时候遇到个这样的问题 自己是用vs2010 c#写的错误提示是这样的“线程间操作无效: 从不是创建控件“txtreceive”的线程访问它.” 用的控件是自带的serialPor ...
- C# params传递多个参数
C#开发语言中 params 是关键字,可以指定在参数数目可变处采用参数的方法参数.在函数的参 数数目可变而执行的代码差异很小的时候很有用! params关键字表示函数的参数是可变个数的,即可变的方法 ...
- API 版本控制的几种方式
个人建议:用content type,即放在Header里面!比如加一个Version:1.4.3 这篇文章写得很好,介绍了三种实现web api版本化的三种方式.我从评论里又收集到两种方式,所以一共 ...
- 概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM 各公共网关接口介绍
CGI CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上. CGI可以用任何一 ...
- Linux 内存中的Cache,真的能被回收么?
您真的了解Linux的free命令么? 在Linux系统中,我们经常用free命令来查看系统内存的使用状态.在一个RHEL6的系统上,free命令的显示内容大概是这样一个状态: 这里的默认显示单位是k ...
- jQuery select添加图标
//下拉菜单样式 /*查找全部select的下拉菜单*/ function getElemsById(cot_val){ return document.getElementById(cot_val) ...
- httpclient 释放连接的问题 Invalid use of SingleClientConnManager: connection still allocated
Invalid use of SingleClientConnManager: connection still allocated httpPost.releaseConnection(); 该代 ...
- Handler实例
Handler使用例1这个例子是最简单的介绍handler使用的,是将handler绑定到它所建立的线程中.本次实验完成的功能是:单击Start按钮,程序会开始启动线程,并且线程程序完成后延时1s会继 ...