C++的并发世界(五)——线程状态切换

news2024/11/23 2:50:01

0.线程状态

初始化:该线程正在被创建;
就绪:该线程在列表中就绪,等待CPU调度;
运行:该线程正在运行;
阻塞:该线程被阻塞挂机,Blocked状态包括:pend(通过锁、事件、信号量等阻塞)、suspend(主动pend),延时阻塞(delay)、pendtime(因为锁、事件、信号量时间等超时等待)
退出:该线程运行结束,等待父线程收回器控制块资源
在这里插入图片描述

1.竞争状态和临界区

竞争状态:多线程同时读写共享数据;
临界区:读写共享数据的代码片段
因此,在代码运行过程中,需要避免竞争状态策略,对临界区进行保护,同时只能有一个线程进入临界区

2.代码案例

#include <iostream>
#include <thread>

void TestThread()
{
	std::cout << "===========================" << std::endl;
	std::cout << "test 001" << std::endl;
	std::cout << "test 002" << std::endl;
	std::cout << "test 003" << std::endl;
	std::cout << "===========================" << std::endl;
}

int main()
{
	for (int i = 0; i < 10; i++)
	{
		std::thread th(TestThread);
		th.detach();
	}
	getchar();
	return 0;
}

在这里插入图片描述

#include <iostream>
#include <thread>
#include <mutex>

static std::mutex mux;
void TestThread()
{
	mux.lock();
	std::cout << "===========================" << std::endl;
	std::cout << "test 001" << std::endl;
	std::cout << "test 002" << std::endl;
	std::cout << "test 003" << std::endl;
	std::cout << "===========================" << std::endl;
	mux.unlock();
}

int main()
{
	for (int i = 0; i < 10; i++)
	{
		std::thread th(TestThread);
		th.detach();
	}
	getchar();
	return 0;
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【复现】飞鱼星上网行为管理系统RCE漏洞_67

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 飞鱼星企业级智能上网行为管理系统是成都飞鱼星科技开发有限公司开发的一款上网行为管理路由器&#xff0c;专为中小企业、政府机…

C++重载和模板

重载与模板 函数模板可以被另一个模板或一个普通非模板函数重载。 与往常一样&#xff0c;名字相同的函数必须具有不同数量或类型的参数。 如果涉及函数模板&#xff0c;则函数匹配规则会在以下几方面受到影响&#xff1a; 对于一个调用&#xff0c;其候选函数包括所有模板…

数据恢复工具可以恢复所有丢失的文件吗

随着数字时代的快速发展&#xff0c;数据已经成为我们生活与工作中不可或缺的一部分。然而&#xff0c;数据丢失的风险也随之增大。无论是由于误删除、误格式化、病毒感染还是其他意外情况&#xff0c;数据丢失都可能带来不小的损失。在这种情况下&#xff0c;数据恢复工具应运…

揭开AI编程语言Mojo比Pyhon快6.8万倍的5个秘密!

最近&#xff08;2024年3月29日&#xff09;&#xff0c;号称比Python快6.8万倍的Mojo编程语言开源啦&#xff01;6.8万倍&#xff1f;你敢相信这个数字是真的吗&#xff1f;不过&#xff0c;就连Mojo官网都把这个结果贴了出来&#xff08;见下图&#xff09;&#xff0c;这就很…

Java快速入门系列-1(Java概述)

第一章&#xff1a;Java概述 1.1 Java的发展历程1.2 Java的特点与优势1.2.1 特点1.2.2 优势 1.3 Java生态系统介绍1.4 Java在当前技术领域的应用案例 1.1 Java的发展历程 Java语言由Sun Microsystems公司于1995年推出&#xff0c;由James Gosling领导的Green Team小组研发而成…

孙崧-回归祖国的数学天才谈国外学习研究感受

孙崧&#xff0c;这位37岁的美国加州大学伯克利分校数学系教授&#xff0c;今年正式回归祖国&#xff0c;担任浙江大学数学高等研究院杜建英讲席教授、博士生导师。在此&#xff0c;知识人网小编就经历过国外就读、从事博士后研究及任教的这位数学天才是怎么说的&#xff0c;或…

文心一言指令词宝典之旅行篇

作者&#xff1a;哈哥撩编程&#xff08;视频号、抖音、公众号同名&#xff09; 新星计划全栈领域优秀创作者博客专家全国博客之星第四名超级个体COC上海社区主理人特约讲师谷歌亚马逊演讲嘉宾科技博主极星会首批签约作者 &#x1f3c6; 推荐专栏&#xff1a; &#x1f3c5;…

02-JDK新特性-Stream流

Stream流 什么是Stream流 Stream流是Java 8中的一个新特性&#xff0c;它提供了一种处理集合和数组的方式。Stream流可以让我们以一种更加简洁、高效、可读性更强的方式来处理数据。 Stream流可以用于过滤、映射、排序、聚合等操作&#xff0c;它可以让我们避免使用循环和条件…

商务电子邮件: 在WorkPlace中高效且安全

高效和安全的沟通是任何组织成功的核心。在我们关于电子邮件类型的系列文章的第二期中&#xff0c;我们将重点关注商业电子邮件在促进无缝交互中的关键作用。当你身处重要的工作场环境时&#xff0c;本系列的每篇文章都提供了电子邮件的不同维度的视角。 “2024年&#xff0c;全…

互联网轻量级框架整合之Spring框架II

持久层框架 Hibernate 假设有个数据表&#xff0c;它有3个字段分别是id、rolename、note, 首先用IDEA构建一个maven项目Archetype选择org.apache.maven.archetypes:maven-archetype-quickstart即可&#xff0c;配置如下pom <project xmlns"http://maven.apache.org/…

解决Centos7无法连接网络和访问网页连接不上问题

一、网络无法连接问题 网络无法连接的问题我查到了一个很良心的操作&#xff0c;不用重装&#xff0c;因为可能是你虚拟机设置上的问题。我先写我的解决方案&#xff0c;再附上其他几种解决方案。 问题一&#xff1a; 虚拟机的问题****加粗样式 解决&#xff1a; &#xff08;…

自动驾驶传感器:带你搞懂卫星导航GPS-RTK原理

自动驾驶传感器&#xff1a;带你搞懂卫星导航GPS-RTK原理 附赠自动驾驶学习资料和量产经验&#xff1a;链接 0. 前言 自动驾驶的感知层里面&#xff0c;前面Lidar&#xff0c;Radar&#xff0c;Camera的介绍之前已写完。还差GNSS-RTK和IMU模块就补齐了主要的自动驾驶感知层的…

Kubernetes Pod的网络暴露

这里先介绍下Pod的网络暴露&#xff0c;后面复习到service暴露再作更新 一、hostNetwork使用宿主机的网络 1、编写pod-hostnetwork.yaml 配置文件中pod的spec.hostNetwork: true 的配置可实现 apiVersion: v1 kind: Pod metadata:name: pod-hostnetwork spec:hostNetwork: …

一文了解 2024 美国流媒体行业动态

Tubi 每年都会发布流媒体市场研究报告&#xff0c;这既是对流媒体市场的深入参与和贡献&#xff0c;也能帮助广告商深入理解流媒体用户群体和 Tubi 的独特优势。 近日&#xff0c;Tubi 发布了 2024 年美国流媒体市场调研报告&#xff0c;本文将概要介绍其中的关键内容&#xf…

C++——list类及其模拟实现

前言&#xff1a;这篇文章我们继续进行C容器类的分享——list&#xff0c;也就是数据结构中的链表&#xff0c;而且是带头双向循环链表。 一.基本框架 namespace Mylist {template<class T>//定义节点struct ListNode{ListNode<T>* _next;ListNode<T>* _pre…

蓝牙Simple Peripheral工程学习

前言 TI BLE SDK提供了Simple Peripheral工程,初学者可以通过这个工程来学习基本的蓝牙知识,通过实操掌握蓝牙基本的理论与通信方式。 在介绍这个工程前,先为大家介绍蓝牙Peripheral与Central的区别。如下图GAP主要负责Ble设备的连接,GAP状态机描述了设备空闲、设备发现与…

MySQL的基本操作(超详细)

&#x1f468;‍&#x1f4bb;作者简介&#xff1a;&#x1f468;&#x1f3fb;‍&#x1f393;告别&#xff0c;今天 &#x1f4d4;高质量专栏 &#xff1a;☕java趣味之旅 &#x1f4d4;&#xff08;零基础&#xff09;专栏&#xff1a;MSQL数据库 欢迎&#x1f64f;点赞&…

计算机网络_工具

从你的电脑到指定ip网站&#xff0c;用时3ms ttl TTL Time To Live 数据包存活时间 指一个数据包在经过一个路由器时&#xff0c;可传递的最长距离&#xff08;跃点数&#xff09;。每当数据包经过一个路由器时&#xff0c;其存活次数就会被减一 256 - 249 7&…

大日志精选案例五:某教育局网络安全与信息化工作稳步推进

“教育网络安全&#xff0c;是保障学校正常运行和教育质量的重要基石。日志&#xff0c;作为记录系统运行和网络访问关键事件的重要载体&#xff0c;对于发现安全隐患和威胁具有不可替代的作用。我们一直在探寻更为高效、精准的日志管理策略。聚铭的大日志方案&#xff0c;成功…