C11线程管理:线程创建
1、线程的创建
C11创建线程非常简单,只需要提供线程函数就行,标准库提供线程库,并可以指定线程函数的参数。
- #include <iostream>
- #include <thread>
- void vFunc(int i, int j)
- {
- std::cout << i << " " << j << std::endl;
- }
- int main()
- {
- std::thread t(vFunc, , );
- t.join();
- return ;
- }
2、阻塞&非阻塞
在线程执行的时候,可以选择线程是否阻塞执行,如果阻塞,则主线程等线程函数执行完,再往下执行,否则启动线程之后,主线程直接往下执行。
join函数会阻塞线程,直到线程函数执行结束,如果线程函数有返回值,返回值会被忽略。
如果不希望线程阻塞执行,那就需要线程和线程对象分离,让线程作为后台线程执行,当前线程不会阻塞,但是,分离之后的线程就无法再和主线程发生联系,不能再通过join来等待线程执行完成,线程何时执行完成也无法控制。
需要注意的是,std::thread出了作用域之后将会析构,如果线程函数还未执行完成,则会发生错误,所以,需要保证线程函数的生命周期在线程变量std::thread的生命周期内。
- #include <iostream>
- #include <thread>
- void vFunc(int i, int j)
- {
- std::cout << i << " " << j << std::endl;
- }
- int main()
- {
- std::thread t(vFunc, , );
- t.detach();
- //do other thing
- return ;
- }
3、其他用法
3.1 移动
线程不能复制,但是可以移动。移动后的线程不代表任何线程。
- #include <iostream>
- #include <thread>
- void vFunc(int i)
- {
- //do something
- }
- int main()
- {
- //1.转移
- std::thread t(vFunc, );
- std::thread t1(std::move(t));
- //t.join(); 将会抛异常
- t1.join();
- return ;
- }
3.2 其他线程函数传入方式
可以通过std::bind或者lambda表达式来创建线程。
- //2.lambda&bind
- std::thread t2(std::bind(vFunc, ));
- std::thread t3([](int a, int b){}, , );
- t2.join();
- t3.join();
3.3 线程信息获取
线程可以获取当前现成的ID,还可以获取当前CPU的核心数量。
- #include <iostream>
- #include <thread>
- void vFunc(){}
- int main()
- {
- std::thread t(vFunc);
- //获取当前线程ID
- std::cout << t.get_id() << std::endl;
- //获取CPU核心数量
- std::cout << std::thread::hardware_concurrency() << std::endl;
- return ;
- }
3.4 线程休眠
可以通过std::this_thread::sleep_for来让当前函数休眠一段时间。
- #include <iostream>
- #include <thread>
- #include <chrono>
- void vFunc()
- {
- for (int i = ; i < ; i++)
- {
- std::this_thread::sleep_for(std::chrono::seconds());
- std::cout << i << std::endl;
- }
- }
- int main()
- {
- std::thread t(vFunc);
- t.join();
- return ;
- }
C11线程管理:线程创建的更多相关文章
- Java基础之线程——管理线程同步方法(BankOperation2)
控制台程序. 当两个或多个线程共享同一资源时,例如文件或内存块,就需要采取措施,确保其中的一个线程不会修改另一个线程正在使用的资源.当其中的一个线程更新文件中的某个记录,同时另一个线程正在检索这个记录 ...
- Java基础之线程——管理线程同步代码块(BankOperation4)
控制台程序. 除了同步类对象的方法之外,还可以把程序中的语句或代码块制定为synchronized,这种方式更强大,因为可以指定哪个对象从语句或代码块的同步中获益,而不像同步方法那样仅仅是包含代码的对 ...
- Android线程管理(二)——ActivityThread
线程通信.ActivityThread及Thread类是理解Android线程管理的关键. 线程,作为CPU调度资源的基本单位,在Android等针对嵌入式设备的操作系统中,有着非常重要和基础的作用. ...
- C11线程管理:异步操作
1.异步操作 C++11提供了异步操作相关的类,std::future.std::promise和std::package_task.std::future作为异步结果的传输通道,方便的获取线程函数的 ...
- 为什么使用 Executor 框架比使用应用创建和管理线程好?
为什么要使用 Executor 线程池框架 1.每次执行任务创建线程 new Thread()比较消耗性能,创建一个线程是比较耗 时.耗资源的. 2.调用 new Thread()创建的线程缺乏管理, ...
- ACE线程管理机制-线程的创建与管理
转载于:http://www.cnblogs.com/TianFang/archive/2006/12/04/581369.html 有过在不同的操作系统下用c++进行过多线程编程的朋友对那些线程处理 ...
- Android线程管理之ThreadLocal理解及应用场景
前言: 最近在学习总结Android的动画效果,当学到Android属性动画的时候大致看了下源代码,里面的AnimationHandler存取使用了ThreadLocal,激起了我很大的好奇心以及兴趣 ...
- C++ 11 多线程--线程管理
说到多线程编程,那么就不得不提并行和并发,多线程是实现并发(并行)的一种手段.并行是指两个或多个独立的操作同时进行.注意这里是同时进行,区别于并发,在一个时间段内执行多个操作.在单核时代,多个线程是并 ...
- Android线程管理之Thread使用总结
前言 最近在一直准备总结一下Android上的线程管理,今天先来总结一下Thread使用. 线程管理相关文章地址: Android线程管理之Thread使用总结 Android线程管理之Executo ...
随机推荐
- 01慕课网《vue.js2.5入门》——基础知识
前端框架 Vue.js2.5 2018-05-12 Vue官网:https://cn.vuejs.org/ 基础语法+案例实践+TodoList+Vue-cli构建工具+TodoList Vue基础语 ...
- CS小分队第二阶段冲刺站立会议(5月30日)
昨日成果:解决了前天遗留的问题,实现了主界面对于电脑上应用的添加和删除 遇到问题:添加和删除按钮时候,按钮位置图像与北京图片冲突,会出现闪动现象. 删除是通过右键单击出现菜单,其中有删除的选项,但是这 ...
- 元素相加交换另解&puts的一个用法
#include<iostream> using namespace std; int main(){ int a,b; cin>>a>>b; a^=b; b^=a ...
- CocoaPods 创建私有仓库
这里有个坑首先需要注意,创建私有cocoapods仓库需要两个git仓库,即代码仓库,Specs文件仓库. 一.创建私有库 1.创建自己源码仓库,假设是A.git; 2.对A仓库: git add . ...
- iOS- 关于AVAudioSession的使用——后台播放音乐
1.前言 •AVAudioSession是一个单例,无需实例化即可直接使用.AVAudioSession在各种音频环境中起着非常重要的作用 •针对不同的音频应用场景,需要设置不同的音频会话分类 1 ...
- Servlet处理表单
- CCF——折点计数201604-1
问题描述 给定n个整数表示一个商店连续n天的销售量.如果某天之前销售量在增长,而后一天销售量减少,则称这一天为折点,反过来如果之前销售量减少而后一天销售量增长,也称这一天为折点.其他的天都不是折点.如 ...
- ADO.NET DBHelper 类库
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...
- Spring Cloud 架构 五大神兽的功能
什么是微服务 微服务的概念源于2014年3月Martin Fowler所写的一篇文章“Microservices”. 微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调 ...
- Kafka在大型应用中的 20 项最佳实践
原标题:Kafka如何做到1秒处理1500万条消息? Apache Kafka 是一款流行的分布式数据流平台,它已经广泛地被诸如 New Relic(数据智能平台).Uber.Square(移动支付公 ...