C++多线程编程(2):四种线程管理方法

文章首发于我的个人博客:欢迎大佬们来逛逛

文章目录

  • 线程管理
  • get_id
  • sleep_for
  • sleep_until
  • yield

线程管理

有一个this_thread的名称空间中定义了许多的线程管理方法:

  • get_id:获取当前线程id
  • sleep_for:当前线程休眠一段时间
  • sleep_for:当前线程休眠,直到某个时间点之后结束休眠
  • yield:当前线程立刻被抛弃,释放CPU时间片

get_id

获取当前线程id,每个线程的id都是唯一的,并且也可以获取主线程的id:

//获取线程Id
void threadID() {
	std::cout << "Id: " << std::this_thread::get_id() << '\n';
}

sleep_for

chrono库提供了许多关于时间的操作,在我们接下来的介绍中需要用到。

当前线程休眠一段时间,其中一段时间是你自己给出的。

实际上调用这个函数会立刻使得线程从运行态转为阻塞状态,并且休眠一段时间。

位于阻塞态会让出当前的CPU资源,因此可以使得其他线程使用他让出的CPU资源,提高资源的利用率。

线程的五种状态:创建,就绪,运行,阻塞,终止

函数原型如下:

  • chrono::duration:表示一个时间段。
void sleep_for(const chrono::duration<...>& durationTime)

具体如何传参?

std::this_thread::sleep_for(std::chrono::seconds(2));  // 休眠两秒
std::this_thread::sleep_for(std::chrono::microseconds(2000)); //休眠两千毫秒

还有minutes,hours等等。

//sleep_for延迟函数
void testSleep_for() {
	std::cout << "子线程sleep_for: \n";
	std::this_thread::sleep_for(std::chrono::seconds(2));
	std::cout << "子线程sleep_for结束: \n";
}

sleep_until

该函数与上面的函数类似,只不过他接受一个时间点,上面的sleep_for是一个时间段

void sleep_until(const chrono::time_point<...>& _Abs_time)

对于chrono如何表示一个时间点**time_point** 有以下方法:

  • system_clock:获取系统时间

  • steady_clock: 表示稳定时间间隔,即不随系统时间修改而变化的时间间隔。

  • high_resolution_clock: 实际上就是上一种

    using high_resolution_clock = steady_clock;
    

如何获取当前时间?

使用now()函数

以下三种根据情况使用,都可以作为sleep_until的参数。

std::chrono::high_resolution_clock::now();
std::chrono::system_clock::now();
std::chrono::steady_colck::now();

具体应用:

使得每次打印间隔两秒的时间间隔,如下我们构造了一个时间点

实际上与sleep_for类似,只不过sleep_for表示一个时间段,sleep_until表示到…为止,是一个时间点。

std::cout << "子线程Sleep_untild: \n";
	for (int i = 1; i <= 10; i++) {
		auto startTime = std::chrono::steady_clock::now();
		std::this_thread::sleep_until(startTime+std::chrono::seconds(2));
		std::cout << "i= " << i << '\n';
	}
std::cout << "子线程Sleep_untild结束: \n";

yield

该函数表示立刻抛弃(立刻停止)此线程,释放CPU时间片,并且立刻使得该线程从运行转到就绪状态

注意虽然抛弃了此线程,释放了CPU的资源,但是它仍然会参与到下一轮的线程CPU时间片的争夺中,也就是说我调用了这个函数函数,为什么感觉没有什么用呢?实际上这是一个概率问题。

案例:

每执行一次循环,让该线程主动放弃 CPU 资源重新和其他线程再次抢夺 CPU 时间片,如果其他线程抢到了 CPU 时间片就可以执行相应的任务了。

否则容易出现其他线程没有机会执行的困难。

void testYield2(int id) {
	for (int i = 1; i <= 1000; i++) {
		std::cout << "id: " <<id << ": " << i << '\n';
		std::this_thread::yield();
	}
}

...
std::thread t3(testYield2, 1);
std::thread t4(testYield2, 2);
t3.join();
t4.join();

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/164293.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开源更安全? yum源配置/rpm 什么是SSH?

文章目录 1.开放源码有利于系统安全2.yum源配置&#xff0c;这一篇就够了&#xff01;(包括本地&#xff0c;网络&#xff0c;本地共享yum源)3.rpm包是什么4.SSH是什么意思&#xff1f;有什么功能&#xff1f; 1.开放源码有利于系统安全 开放源码有利于系统安全 2.yum源配置…

数据挖掘复盘——apriori

read_csv函数返回的数据类型是Dataframe类型 对于Dataframe类型使用条件表达式 dfdf.loc[df.loc[:,0]2]df: 这是一个DataFrame对象的变量名&#xff0c;表示一个二维的表格型数据结构&#xff0c;类似于电子表格或SQL表。 df.loc[:, 0]: 这是使用DataFrame的.loc属性来进行…

Java调用com组件之jacob

一、背景介绍 现有标准的 win32 com组件&#xff0c;有如下的参数&#xff1a; 属性 值 说明Program IDyinhai.yh_hb_sctrCOM ClassIDCOM ClassName COClass_yh_hb_sctr Interface TypeDual InterfaceInterface NameIyh_hb_sctr 具有一个方法&#xff1a; yh_hb_call( string…

6个系统设计的基本概念

1*Xl9kK7ffgu18IaJ637-cTg.png 简介 这份综合指南将引导你掌握在系统设计中取得成功所需的基本概念。 垂直和水平扩展 1. 垂直扩展 系统扩展的最直接方式是通过垂直扩展。这涉及升级现有服务器&#xff0c;例如增加更多的RAM或更快的CPU。 1*8OAEF45gAfOxvrTUz6hp3w.png 垂直扩…

《向量数据库指南》——亚马逊云科技向量数据库揭秘:点亮数据未来!

在我们讨论亚马逊云科技向量数据库之前,我们必须先搞懂向量数据库。 那么,向量数据库是什么呢?简单来说,向量数据库就是一种专门用于处理和查询向量数据的数据库。与传统数据库以表格形式组织和存储数据不同,向量数据库采用多维数值数组的形式处理和存储数据。它的主要目标…

从多表连接视图对比人大金仓和Oracle

KING BASE 信息时代&#xff0c;数据是驱动业务决策和创新的核心资源。然而&#xff0c;随着数据量的不断增加&#xff0c;有效地处理和整合数据的过程变得愈发复杂。这时&#xff0c;多表连接视图悄然走进数据库世界&#xff0c;不仅能够将多个表中的数据整合在一起&#xff0…

和解电话(匿名电话)/情侣拉黑联系电话/虚拟号/虚拟中间号/拉黑联系项目代码

和解电话&#xff0c;又名匿名电话 使用中间号转接到被叫人&#xff0c;不显示呼叫人号码&#xff0c;类似美团隐私号 呼叫人A->中间号B->被叫人C 演示地址&#xff1a;微信打开(http://sms.test.4php.top/sms/phone) 实现代码如下 <section class"section&q…

Java工具包Hutool框架

Hutool是一个Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML 等 JDK 方法进行封装,组成各种 Util 工具类。官网地址:https://www.hutool.cn/。 添加依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artif…

【具身智能评估2】具身视觉语言规划(EVLP)数据集基准汇总

参考论文&#xff1a;Core Challenges in Embodied Vision-Language Planning 论文作者&#xff1a;Jonathan Francis, Nariaki Kitamura, Felix Labelle, Xiaopeng Lu, Ingrid Navarro, Jean Oh 论文原文&#xff1a;https://arxiv.org/abs/2106.13948 论文出处&#xff1a;Jo…

WIFI版本云音响设置教程腾讯云平台版本

文章目录 WIFI版本云音响设置教程腾讯云平台版本一、申请设备三元素1.腾讯云物联网平台2.创建产品3.设置产品参数4.添加设备5.获取三元素 二、设置设备三元素1.打开MQTTConfigTools2.计算MQTT参数3.使用windows电脑的WIFI连接到设备热点4.设置参数 三、腾讯云物联网套件协议使用…

基于鼠群算法优化概率神经网络PNN的分类预测 - 附代码

基于鼠群算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于鼠群算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于鼠群优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…

简历技术栈redis点

熟悉Redis常见的数据类型以及缓存问题&#xff0c;如缓存穿透、雪崩 、击穿等 Redis五种数据类型 Redis常用命令 查看所有 keys * 字符串类型string 常用命令 举例&#xff1a; 放置一个字符串数据到redis中&#xff0c;先为数据定义一个名称&#xff0c;比如name,age等&am…

线性方程组

线性方程组 设存在线性方程组 { a 1 , 1 x 1 a 1 , 2 x 2 ⋯ a 1 , n x n b 1 a 2 , 1 x 1 a 2 , 2 x 2 ⋯ a 2 , n x n b 2 ⋮ ⋮ a m , 1 x 1 a m , 2 x 2 ⋯ a m , n x n b m \left.\left\{\begin{array}{l}a_{1,1}x_1a_{1,2}x_2\cdotsa_{1,n}x_nb_1\\a_{2,1}…

大模型的语言能力

NLP作为一个领域为基础模型开辟了道路。虽然这些模型在标准基准测试中占据主导地位&#xff0c;但这些模型目前获得的能力与那些将语言描述为人类交流和思维的复杂系统的能力之间存在明显的差距。针对这一点&#xff0c;我们强调语言变异的全部范围&#xff08;例如&#xff0c…

大模型的视觉能力

摘要&#xff1a; 计算机视觉引领了人工智能中深度学习的采用&#xff0c;这表明在大型注释数据集上预训练的模型可以转移到许多下游设置。现在&#xff0c;在网络规模的原始数据而不是策划的数据集上进行预训练&#xff0c;基础大模型在计算机视觉中正在崛起。这些模型…

Windows安装多个版本的Java

在做持续集成CI/CD时&#xff0c;需要用到Jenkins&#xff0c;本人爱好使用各种最新版&#xff0c;down下来之后发现&#xff0c;新版只支持Java11以上的版本了&#xff01;&#xff01; 苦苦找了很久&#xff0c;找不到正规Java8版本的Jenkins安装包&#xff01; 干脆换个思路…

盘点54个Python实用工具源码Python爱好者不容错过

盘点54个Python实用工具源码Python爱好者不容错过 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 链接&#xff1a;https://pan.baidu.com/s/1OXyEh-Yy3JI90jvn6d6wRw?pwd8888 提取码&#xff1a;8888 项目名称 7z辅助破解工…

遥感数据

在研究中&#xff0c;我们常需要遥感数据。在下面的网站中&#xff0c;可以得到遥感数据。 EarthExplorer (usgs.gov)https://earthexplorer.usgs.gov/登陆网站&#xff1a; 通常&#xff0c;在Additional Criteria中&#xff0c;可以下载遥感数据。 不过&#xff0c;这个选项…

html综合笔记:设计实验室主页

&#xff11; 主页来源及效果 Overview - Lab Website Template docs (gitbook.io) greenelab/lab-website-template: An easy-to-use, flexible website template for labs (github.com) 2 创建网页 3 主要的一些file 3.1 index.md 主页面 3.1.1 intro 3.1.2 highlight …

mysql优化之explain 以及 索引优化

Mysql安装文档参考&#xff1a;https://blog.csdn.net/yougoule/article/details/56680952 Explain工具介绍 使用EXPLAIN关键字可以模拟优化器执行SQL语句&#xff0c;分析你的查询语句或是结构的性能瓶颈 在 select 语句之前增加 explain 关键字&#xff0c;MySQL 会在查询上设…