【C++11并发】thread 笔记
简介
进程和线程的区别
进程:一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。
线程:进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。
与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。更多
std::thread就是C++11为开发者提供的线程类。他表示一个线程,一般在构造的时候,就会启动他的线程方法。线程方法的返回值会被忽略,一般通过std::promise或者共享变量来获取。如果线程方法抛出了一场,没有被处理的话,std::terminate就会被调用。
头文件
#include <thread>
API
构造方法
thread() noexcept; // 默认构造方法
thread( const thread& ) = delete; // 禁用拷贝构造方法
thread( thread&& other ) noexcept; // 移动构造方法,暗示着一个thread对象只能表示一个线程,不与其他thread对象共享// f:可调用对象;args:f的参数;如果开调用对象无法正常起启动,就会抛出异常[std::system_error](https://en.cppreference.com/w/cpp/error/system_error)
// args是采用移动或者以值的方法传递f,如果想采用引用方式需要用std::ref或者std::cref包装一下
template< class Function, class... Args >
explicit thread( Function&& f, Args&&... args );
例子:https://en.cppreference.com/w/cpp/thread/thread/thread
析构方法
~thread(); // 如果当前thread对象依然关联着线程,即joinable() == true, 那么就会调用std::terminate()被调用
移动赋值操作符
thread& operator=( thread&& other ) noexcept; // 如果当前thread对象依然关联着线程,即joinable() == true, 那么就会调用std::terminate()被调用
成员方法
- 判断thread是否关联着一个有效线程,如果thread被移动、销毁了,或者调用thread默认构造方法构造的对象,那么该方法就返回false
bool joinable() const noexcept;
- 获取线程id
std::thread::id get_id() const noexcept; // 线程的唯一标识
std::thread:id是一个类,一般常用的方法有:operator==, operator<<。另外有一个特化的hash仿函数:template<> struct hashstd::thread::id; hash参考代码
- 获取thread对象关联的线程句柄,一般与pthread_getschedparam,pthread_setschedparam配合使用,可以设置线程的优先级。
更多参考
native_handle_type native_handle();
- 获取硬件支持的最大线程数,他是thread的静态方法
static unsigned int hardware_concurrency() noexcept;
- 等待线程函数执行结束,他会阻塞当前线程。可能会抛出std::system_error异常
void join();
- 分离线程与thread对象,即thread对象不在管理该线程,joinable方法会返回false,调用join方法会抛出异常。当线程方法执行结束的时候,相关资源才会被释放。可能会抛出std::system_error异常
void detach();
- 交换两个thread对象关联的线程
void swap( std::thread& other ) noexcept;
在线尝试thread
相关文章:
【C++11并发】thread 笔记
简介 进程和线程的区别 进程:一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。 线程:进程中的一个执行任务(…...
OBS Studio免费开源录屏工具
OBS是Open Broadcaster Software的缩写,是一款免费且开源的多平台录屏和直播软件。它可以用于录制屏幕、捕获游戏、创建教学视频、直播游戏等。OBS功能强大且灵活,提供了许多配置选项和自定义功能,使用户能够根据自己的需求进行设置和调整。它…...
【汇编】[bx+idata]的寻址方式、SI和DI寄存器
文章目录 前言一、[bxidata]寻址方式1.1 [bxidata]的含义1.2 示例代码 二、SI和DI寄存器2.1 SI和DI寄存器是什么?2.2 [bxsi]和[bxdi]方式寻址2.3 [bxsiidata]和[bxdiidata] 总结 前言 在汇编语言中,寻址方式是指指令如何定位内存中的数据。BX寄存器与偏…...
Java,集合框架,关于Map接口与Collections工具类
目录 Map接口 Map及其实现类的对比: HashMap中元素的特点: 相关方法: 添加、修改操作: 删除操作: 元素查询的操作: 元视图操作的方法: TreeMap的使用: Properties类: Collections工具…...
【实用技巧】更改ArduinoIDE默认库文件位置,解放系统盘,将Arduino15中的库文件移动到其他磁盘
本文主要介绍更改Arduino IDE (含2.0以上版本)默认库文件位置的方法。 原创文章,转载请注明出处: 【实用技巧】更改ArduinoIDE默认库文件位置,解放C盘,将Arduino15中的库文件移动到其他磁盘-CSDN博客文章浏…...
二、什么是寄存器
目录 一、STM32芯片架构简图及系统框图 1.1 STM32芯片架构简图 1.1.1 FLASH是什么,用来做什么 1.1.2 SRAM是什么,用来做什么 1.1.3 片上外设是什么,用来做什么 1.2 系统框图 1.2.1 驱动单元 1.2.2 被动单元 二、什么是寄存器 2.1 存…...
邀请报名|11月24日阿里云原生 Serverless 技术实践营 深圳站
活动简介 “阿里云云原生 Serverless 技术实践营 ” 是一场以 Serverless 为主题的开发者活动,活动受众以关注 Serverless 技术的开发者、企业决策人、云原生领域创业者为主,活动形式为演讲、动手实操,让开发者通过一个下午的时间增进对 Ser…...
学习UI第一天
在工作闲暇之余,自己画的原型图,再次做一次记录,哈哈哈 萌宠领养UI设计原型图 https://modao.cc/proto/lq2KqIVBs48xwylNZlA7OP/sharing?view_moderead_only #萌宠领养-分享 可以点击此链接,进行查看O(∩_∩)O哈哈~...
1688商品详情原数据(2023年11月最新版)
返回数据: 请求链接 {"item": {"desc_wdescContent": {"itemProperties": [],"offerId": "705844836943","wdescContent": {"content": "<div id\"offer-template-0\"&g…...
CleanMyMac X2024免费测试版好不好用?值不值得下载
如果你是一位Mac用户,你可能会遇到一些问题,比如Mac运行缓慢、磁盘空间不足、应用程序难以管理等。这些问题会影响你的Mac的性能和体验,让你感到沮丧和无奈。那么,有没有一款软件可以帮助你解决这些问题呢?答案是肯定的…...
Linux操作文件的底层系统调用
目录 1.概述 2.open的介绍 3.write 的介绍 4.read 5.close的介绍 6.文件描述符 1.概述 C语言操作文件的几个库函数:fopen,fread,fwrite,fclose; 系统调用:open,read,write,close; 系统调用方法实现在内核中;(陷入内核,切换到内核) 2.open的介绍 open重载:两个参数用于打…...
steam搬砖项目2023年现状分析,到底还能不能做?
关于CSGO游戏搬砖项目的5大认知误区 当前的steam搬砖项目市场正变得混乱不堪。你对该项目的了解程度决定了你是否能在这个生态系统中获得收益。 假设你有100万资金,想要全部投入搬砖事业,但对项目一无所知,只看中收益。即使你有充足的资金&a…...
【论文阅读】基于隐蔽带宽的汽车控制网络鲁棒认证(二)
文章目录 第三章 识别CAN中的隐藏带宽信道3.1 隐蔽带宽vs.隐藏带宽3.1.1 隐蔽通道3.1.2 隐藏带宽通道 3.2 通道属性3.3 CAN隐藏带宽信道3.3.1 CAN帧ID字段3.3.2 CAN帧数据字段3.3.3 帧错误检测领域3.3.4 时间通道3.3.5 混合通道 3.4 构建信道带宽公式3.5通道矩阵3.6 结论 第四章…...
string类的常用方法
string类是C中一个非常常用的类,它提供了许多方法来操作字符串。以下是一些常用的string类方法: 构造函数: string(): 创建一个空的字符串。 string(const char* str): 用一个C风格字符串来初始化一个新的字符串。string(size_t n, char c): 创建一个由…...
Java面向对象(高级)-- 单例(Singleton)设计模式
文章目录 一、单例设计模式(1) 设计模式概述(2) 何为单例模式(3) 实现思路(4) 单例模式的两种实现方式1. 饿汉式2. 懒汉式3. 饿汉式 vs 懒汉式 (5) 单例模式的…...
【Kingbase FlySync】命令模式:安装部署同步软件,实现Oracle到KES实现同步
【Kingbase FlySync】命令模式:安装部署同步软件,实现Oracle到KES实现同步 一.准备工作二.环境说明三.目标四.资源虚拟机 五.实操(1).准备安装环境Orcle服务器(Oracle40)1.上传所有工具包2.操作系统配置a.增加flysync 用户、设置密码b.配置环境变量c.调整limits.con…...
2311d导入c的语义不同
原文 以下D代码正常工作: enum X "X"; import core.stdc.stdio; void main(){puts(X); }但是,如果该X枚举是C文件中#define的结果,则会出现错误: //x.c #define X "X" //D代码 import x; import core.stdc.stdio; void main(){puts(X); //错误 }错误:不…...
OpenHarmony Meetup北京站招募令
OpenHarmony Meetup城市巡回北京站火热来袭!!日期:2023年11月25日14:00地点:中国科学院软件园区五号楼B402与OpenHarmony技术大咖近距离互动,分享技术见解,结交志同道合的朋友!活动主题聚焦Open…...
C语言——冒泡排序
一、冒泡排序是什么 冒泡排序: 冒泡排序(Bubble Sort),又被称为气泡排序或泡沫排序。升序时:它会遍历若干次需要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小;如果前者比后者大&#x…...
08.智慧商城——购物车布局、全选反选、功能实现
01. 购物车 - 静态布局 基本结构 <template><div class"cart"><van-nav-bar title"购物车" fixed /><!-- 购物车开头 --><div class"cart-title"><span class"all">共<i>4</i>件商品…...
FastGithub:5分钟告别GitHub龟速访问,开发效率提升3倍的终极方案
FastGithub:5分钟告别GitHub龟速访问,开发效率提升3倍的终极方案 【免费下载链接】FastGithub github定制版的dns服务,解析访问github最快的ip 项目地址: https://gitcode.com/gh_mirrors/fa/FastGithub 你是否经历过这样的场景&#…...
Unity热更新原理与方案选型:从AOT限制到HybridCLR实践
1. 热更新不是“打补丁”,而是游戏生命周期的呼吸系统很多人第一次听说Unity热更新,脑子里浮现的是“改个UI文字不用重发包”“修个崩溃不用上架审核”——这没错,但太浅了。我带过三支手游团队,从2017年用AssetBundle硬啃&#x…...
观测通过Taotoken调用大模型API的延迟与用量消耗体验
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观测通过Taotoken调用大模型API的延迟与用量消耗体验 在开发工作中引入大模型能力,例如自动生成代码注释,已…...
TaoToken 的容灾路由机制如何保障关键业务接口的连续性
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 TaoToken 的容灾路由机制如何保障关键业务接口的连续性 在构建依赖大模型能力的应用时,服务的稳定性是开发者必须面对的…...
开启Windows 11的安卓革命:WSA让电脑与手机完美融合
开启Windows 11的安卓革命:WSA让电脑与手机完美融合 【免费下载链接】WSA Developer-related issues and feature requests for Windows Subsystem for Android 项目地址: https://gitcode.com/gh_mirrors/ws/WSA 在数字生活多元化的今天,你是否曾…...
戴森球计划蓝图库:5000+工厂设计方案助你快速建造星际帝国
戴森球计划蓝图库:5000工厂设计方案助你快速建造星际帝国 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints 在《戴森球计划》这款复杂的工厂建造游戏中࿰…...
百度网盘Mac版破解插件:免费解锁SVIP高速下载完整指南
百度网盘Mac版破解插件:免费解锁SVIP高速下载完整指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘Mac版下载速度缓慢而困…...
BE-ToF技术:突破远距离深度成像的创新方案
1. BE-ToF技术概述:突破远距离深度成像的瓶颈深度感知技术在现代计算机视觉系统中扮演着越来越重要的角色,特别是在自动驾驶、机器人导航和三维重建等领域。时间飞行(Time-of-Flight, ToF)成像作为深度感知的主流技术之一,其性能直接决定了这…...
5分钟快速上手:Akagi麻将AI助手完整实战指南
5分钟快速上手:Akagi麻将AI助手完整实战指南 【免费下载链接】Akagi 支持雀魂、天鳳、麻雀一番街、天月麻將,能夠使用自定義的AI模型實時分析對局並給出建議,內建Mortal AI作為示例。 Supports Majsoul, Tenhou, Riichi City, Amatsuki, with…...
Path of Building PoE2:终极流放之路2角色构建指南与实战教程
Path of Building PoE2:终极流放之路2角色构建指南与实战教程 【免费下载链接】PathOfBuilding-PoE2 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding-PoE2 想要在《流放之路2》中打造完美角色吗?Path of Building PoE2&#…...
