住房城乡住房和城乡建设部网站首页/优化大师怎么强力卸载
Win32和c++11多线程
- 一、概念
- 1.线程的特点
- 线程内核对象
- 线程控制块
- 线程是独立调度和分派的基本单位
- 共享进程的资源
- 2.线程的上下文切换
- 引起上下文切换的原因
- 3.线程的状态
- 二、Windows多线程API
- 1.CreateThread创建线程
- 2.获取线程ID
- 3.关闭线程句柄
- 4.挂起线程
- 5.恢复线程
- 6.休眠线程的执行
- 7.WaitForSingleObject
- 8.终止线程
- 9.获取线程结束码
- 10.WaitForMultipleObjects
- 11.\_beginthread和\_endthread
- CreateThread不安全
- _beginthread
- _endthread
- 三、多线程模拟火车站售票
- 1.介绍
- 2.实现
- 3.为什么会出现卖出了第0张票?
- 四、多线程之间的同步和互斥
- 1.临界区
- 临界区结构对象
- 初始化临界区
- 进入和离开临界区
- 尝试进入临界区
- 区别
- 删除临界区
- 2.线程死锁
- 死锁产生的必要条件
- 3.信号量
- 临界区与信号量对比
- 相关API
- (1)创建信号量
- (2)P操作
- (3)V操作
- 实现进程或线程只有一个实例
- 4.互斥量mutex
- 相关API
- (1)创建互斥量
- (2)获得互斥量
- (3)释放互斥量
- 示例
- 利用互斥量实现进程只有一个实例
- 5.事件Event
- 有信号状态和无信号状态
- 相关API
- (1)创建事件
- (2)把指定的事件对象设置为有信号状态
- (3)把指定的事件对象设置为无信号状态
- (4)等待事件对象的句柄
- 自动重置事件
- 手动重置事件
- 实现进程只有一个实例
- 6.PV操作
- 生产者消费者问题
- 7.总结
- 五、线程本地存储
- 1.静态TLS
- 2.动态TLS
- 六、多线程间的消息通讯
- 示例:一个线程向另一个线程发送消息
- 七、C++11多线程
一、概念
进程要想执行任务,必须得有线程,线程是进程的基本执行单元,一个进程的所有任务都在线程中执行。
1.线程的特点
线程内核对象
线程控制块
线程是独立调度和分派的基本单位
共享进程的资源
2.线程的上下文切换
引起上下文切换的原因
3.线程的状态
二、Windows多线程API
头文件#include<Windows.h>
1.CreateThread创建线程
参数说明:
线程的句柄是一块地址,线程ID可以用GetCurrentThreadId()函数获得。
2.获取线程ID
3.关闭线程句柄
关闭句柄后线程还会继续执行。
4.挂起线程
5.恢复线程
6.休眠线程的执行
7.WaitForSingleObject
等待一个内核对象变为已通知状态。这个函数常用于线程同步,确保一个线程在继续执行之前等待某个事件(如线程结束、互斥体释放、信号量达到等)。
未通知状态:该句柄关联的线程未结束,仍在执行。
已通知状态:该句柄关联的线程执行结束。
参数:
hHandle
:等待的对象的句柄。这个句柄可以是各种同步对象,如事件、互斥体、信号量、进程或线程。dwMilliseconds
:超时时间,以毫秒为单位。如果设置为INFINITE
,表示无限等待,直到对象进入信号状态。
返回值:
WaitForSingleObject
返回一个 DWORD
值,表示函数的结果。常见的返回值包括:
WAIT_OBJECT_0
:指定的对象已进入信号状态。WAIT_TIMEOUT
:等待超时,指定的对象在超时时间内未进入信号状态。WAIT_FAILED
:函数调用失败。可以通过调用GetLastError
函数获取扩展错误信息。
8.终止线程
9.获取线程结束码
10.WaitForMultipleObjects
参数说明:
11._beginthread和_endthread
CreateThread不安全
_beginthread
参数说明:
返回值:
_endthread
三、多线程模拟火车站售票
1.介绍
2.实现
3.为什么会出现卖出了第0张票?
四、多线程之间的同步和互斥
1.临界区
临界区结构对象
初始化临界区
进入和离开临界区
如果这样加锁,那么只要有一个线程进入临界区,除非所有票卖完,否则不会释放临界区。
如果这样加锁,又会出现卖出第0张票的情况。
最后这种情况,修改代码,在进入临界区后再次判断,可以避免上述情况。
尝试进入临界区
区别
删除临界区
2.线程死锁
死锁产生的必要条件
3.信号量
临界区与信号量对比
-
临界区
-
用于保护共享资源的代码块,确保在同一时间只有一个线程能够执行该代码块。
-
通常用于同一进程内的线程同步。
-
-
信号量
-
是一种更通用的同步机制,允许多个线程同时访问一定数量的共享资源。
-
可以用于进程间同步(IPC)。
-
相关API
(1)创建信号量
(2)P操作
(3)V操作
实现进程或线程只有一个实例
虽然每个进程有自己的地址空间,但命名对象(如命名信号量、命名互斥体等)是在系统范围内共享的。这意味着即使进程有各自的地址空间,命名对象在创建时会注册在操作系统的命名空间中,其他进程可以通过同样的名字访问这些对象。
在 Windows 操作系统中,命名对象(包括信号量、互斥体、事件等)在系统命名空间中共享。也就是说,当一个进程创建一个命名信号量时,操作系统会将该信号量注册在全局命名空间中。其他进程如果尝试创建或打开同名的信号量,就可以访问到这个信号量。
4.互斥量mutex
相关API
(1)创建互斥量
bInitialOwner:指定调用线程是否在互斥对象的初始状态下获得所有权。如果这个值为 TRUE
,调用线程在互斥对象创建成功后立即获得所有权;否则,互斥对象的初始状态为非信号状态。
(2)获得互斥量
(3)释放互斥量
示例
利用互斥量实现进程只有一个实例
5.事件Event
有信号状态和无信号状态
在 Windows 操作系统中,事件对象用于线程同步,其状态可以是“有信号”(signaled)或“无信号”(nonsignaled)。这两种状态用于控制线程的执行,具体如下:
- 当事件对象处于有信号状态时,所有等待该事件的线程都将被解除阻塞,并继续执行。这意味着事件发生了,等待的线程可以继续进行它们的工作。
- 当事件对象处于无信号状态时,所有等待该事件的线程都将被阻塞,直到事件对象的状态变为有信号。这意味着事件尚未发生,等待的线程需要等待,直到事件发生。
事件对象可以分为两种类型:自动重置事件(auto-reset event)和手动重置事件(manual-reset event)。这两种类型的事件对象在状态变更和重置机制上有所不同。
- 当事件对象处于有信号状态时,等待的线程将被解除阻塞,然后事件对象自动重置为无信号状态。如果有多个线程在等待事件,只有一个线程会被解除阻塞。
- 当事件对象处于有信号状态时,所有等待的线程将被解除阻塞,并且事件对象保持有信号状态,直到显式调用
ResetEvent
函数将其状态重置为无信号状态。
相关API
(1)创建事件
(2)把指定的事件对象设置为有信号状态
(3)把指定的事件对象设置为无信号状态
(4)等待事件对象的句柄
自动重置事件
手动重置事件
实现进程只有一个实例
6.PV操作
生产者消费者问题
7.总结
五、线程本地存储
1.静态TLS
2.动态TLS
六、多线程间的消息通讯
示例:一个线程向另一个线程发送消息
使用PeekMessage写法如下:
七、C++11多线程
相关文章:

Win32和c++11多线程
Win32和c11多线程 一、概念1.线程的特点线程内核对象线程控制块线程是独立调度和分派的基本单位共享进程的资源 2.线程的上下文切换引起上下文切换的原因 3.线程的状态 二、Windows多线程API1.CreateThread创建线程2.获取线程ID3.关闭线程句柄4.挂起线程5.恢复线程6.休眠线程的…...

关于python包导入问题的重思考
将顶层目录直接设置为一个包 像这样,每一个文件从顶层包开始导入 这样可以解决我的问题,但是要注意的时,要避免使用出现上下级出现同名包的情况,比如: AutoServer--AutoServer--__init__.py--__init__.py这种情况下…...

攻防世界---misc---津门杯2021-m1
1、题目描述,下载附件是一张bmp格式的图片 2、直觉告诉我这和图片的颜色通道有关 3、于是我就尝试用stegslove打开图片 4、将颜色通道都改为0,点击preview 5、然后发现一串base64编码 6、解码得flag flag{l5DGqF1pPzOb2LU919LMaBYS5B1G01FD}...

【计算机视觉(8)】
基于Python的OpenCV基础入门——图像直方图 直方图图像直方图 图像直方图代码以及实现效果 直方图 直方图是一种用于描述图像亮度分布的统计工具。它将图像的像素亮度值按照不同的亮度等级进行计数,并以直方图的形式呈现出来。图像直方图可以显示图像中每个亮度级别…...

Linux操作系统:Redis在虚拟环境下的安装与部署
Redis下载方法 最近部署项目的时候用到了Redis,自己在安装的时候也碰到了一些列问题最终安装成功,记录一下自己的安装历程。前期准备: 服务器Linux版本:Centos8.4 64位(http://isoredirect.centos.org/centos/8/isos/…...

哈希表和二维矩阵的结合-2352. 相等行列对(新思路、新解法)
题目链接及描述 . - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/equal-row-and-column-pairs/description/?envTypest…...

深度学习中无监督学习
深度学习中的无监督学习 无监督学习(Unsupervised Learning)是一种机器学习方法,在没有标签数据的情况下,从数据中提取有意义的模式和特征。无监督学习广泛应用于深度学习中,以解决数据标注困难和大量无标签数据存在的…...

JVM基础知识
一、JVM的内存区域划分 一个进程在运行的时候,会向操作系统申请到内存资源,从来存放程序运行的相关数据。 JVM本质上就是一个java进程,在运行的时候也会从操作系统那搞一块内存,供Java代码执行使用。 JVM又把申请的一块内存根据不同的用途划分出了不同区域。 每一…...

618网购节,电商能挡住恶意网络爬虫的攻击吗?
目录 爬虫盗取电商数据的步骤 电商平台如何发现网络爬虫? 如何拦截违法网络爬虫 2023年,杭州中院审结了两起涉及“搬店软件”的不正当竞争案件。本案的原告是国内某大型知名电子商务平台的运营主体,而被告则是开发了一款名为“某搬家快速商品…...

Codeforces Round 951 (Div. 2) C、D(构造、线段树)
1979C - Earning on Bets 构造题:观察到k范围很小,首先考虑最终硬币总数可以是多少,我们可以先假设最终的硬币总数为所有k取值的最小公倍数,这样只需要满足每个结果添加1枚硬币即可赚到硬币。 // Problem: C. Earning on Bets //…...

elmentUI el-table 总结行
背景 原因:表格展示的都是明细数据,需要对当前的明细数据的部分字段进行汇总难点:汇总的条件不一定,有时候客户查的是1天,有时候是10天 官方写法 只开启开关 开启汇总开关如果没有汇总方法, 会自动汇总所有…...

【大数据】计算引擎:Spark核心概念
目录 前言 1.什么是Spark 2.核心概念 2.1.Spark如何拉高计算性能 2.2.RDD 2.3.Stage 3.运行流程 前言 本文是作者大数据系列中的一文,专栏地址: https://blog.csdn.net/joker_zjn/category_12631789.html?spm1001.2014.3001.5482 该系列会成体…...

Python | C# | MATLAB 库卡机器人微分运动学 | 欧拉-拉格朗日动力学 | 混合动力控制
🎯要点 🎯正向运动学几何矩阵,Python虚拟机器人模拟动画二连杆平面机械臂 | 🎯 逆向运动学几何矩阵,Python虚拟机器人模拟动画三连杆平面机械臂 | 🎯微分运动学数学形态,Python模拟近似结果 | …...

Signac|成年小鼠大脑 单细胞ATAC分析(1)
引言 在本教程中,我们将探讨由10x Genomics公司提供的成年小鼠大脑细胞的单细胞ATAC-seq数据集。本教程中使用的所有相关文件均可在10x Genomics官方网站上获取。 本教程复现了之前在人类外周血单核细胞(PBMC)的Signac入门教程中执行的命令。…...

【POSIX】运行时so库动态加载
运行时可以自己自定义so库的动态加载框架,主动去加载某些库,并调用其中的某些方法 首先写一些方法,并生成so库 // hello.cpp#include <iostream>/*使用 nm 命令查看 so 库的内容 */// 1. 使用extern // dlsym(handle, "hello&qu…...

爱普生SG2520CAA汽车电子中控专用晶振
随着汽车电子技术的飞速发展,汽车中控系统变得越来越智能化和复杂化。为了确保这些系统的高性能和高可靠性,选择符合AEC-Q200标准的高品质晶振至关重要。爱普生SG2520CAA晶振凭借其优异的特性,成为汽车电子中控系统的理想选择。 爱普生晶振SG…...

Vue——监听器简单使用与注意事项
文章目录 前言编写简单demo注意事项 前言 监听器,在官网中称为侦听器,个人还是喜欢称之为监听器。官方文档如下: vue 官网 侦听器 编写简单demo 侦听器在项目中通常用于监听某个属性变量值的变化,并根据该变化做出一些处理操作。…...

OpenCV的“画笔”功能
类似于画图软件的自由笔刷功能,当按住鼠标左键,在屏幕上画出连续的线条。 定义函数: import cv2 import numpy as np# 初始化参数 drawing False # 鼠标左键按下时为True ix, iy -1, -1 # 鼠标初始位置# 鼠标回调函数 def mouse_paint(…...

uniapp封装picker选择器组件,支持关键字查询
CommonPicker.vue组件 路径在 components\CommonPicker.vue <template><view><uni-easyinput v-model"searchQuery" :placeholder"placeholder" /><picker :range"filteredOptions" :range-key"text" v-model&…...

智慧城市的规划与实施:科技引领城市运行效率新飞跃
随着信息技术的飞速发展,智慧城市的构想正逐步成为现实。作为地理信息与遥感领域的研究者,我深知在这一转型过程中,技术的创新与应用是提升城市运行效率的关键。本文旨在探讨如何利用地理信息系统(GIS)、遥感技术、大数…...

Linux——内存管理代码分析
虚空间管理 页框和页的关系 页框 将内存空间分为一个个大小相等的分区(比如:每个分区4KB),每个分区就是一个页框,也叫页帧,即物理页面,是linux划分内存空间的结果。 每个页框都有一个页框号,即内存块号、物理块号。 页 将用户…...

手机自动化测试:4.通过appium inspector 获取相关app的信息,以某团为例,点击,搜索,获取数据等。
0.使用inspector时,一定要把不相关的如weditor啥的退出去,否则,净是事。 1.从0开始的数据获取 第一个位置,有时0.0.0.0,不可以的话,你就用这个。 第二个位置,抄上。 直接点击第三个启动。不要…...

个人项目———密码锁的实现
布局组件 布局效果 组件绑定 密码锁的实现代码 using TMPro; using UnityEngine; using UnityEngine.UI;public class PasswordPanel : MonoBehaviour {// public Button button;// 所有按键的父物体public Transform buttonPanel;// 输入字符串的文本框public TMP_Text input…...

关于Input【type=number】可以输入e问题及解决方案
一、为什么 因为在数学里e 代表无理数,e是自然对数的底数,同时它又是一个无限不循环小数,所以我们在输入 e 时,输入框会默认 e 是数字,从而没有对它进行限制。 二、解决方案 小提示:vue下监听事件需要加n…...

zabbix“专家坐诊”第241期问答
问题一 Q:华为交换机的100GE 1/0/1口的光模块收光值监测不到,有没有人碰到过这个问题呢?其他的端口都能监测到收光值,但是100GE 1/0/1口监测不到收光值。底层能查到,zabbix 6.0监控不到,以下是端口的报错信…...

了解Kubernetes-RKE2的PKI以及证书存放位置
一、什么是PKI? 简称:证书基础设施。 可以方便理解为当你的集群有Server,Client架构,那么为了安全加密之间的通信,则需要使用证书进行交互,那么利用PKI架构可以安全加密组件之间的通信。 二、Kubernetes的PKI架构什…...

利用大语言模型进行事实匹配
论文地址:Automated Claim Matching with Large Language Models: Empowering Fact-Checkers in the Fight Against Misinformation | Companion Proceedings of the ACM on Web Conference 2024 WWW 2024 Automated Claim Matching with Large Language Models: Empowering F…...

【Stable Diffusion】(基础篇一)—— Stable Diffusion的安装
本系列笔记主要参考B站nenly同学的视频教程,传送门:B站第一套系统的AI绘画课!零基础学会Stable Diffusion,这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili **Stable Diffusion(简称…...

维纳运动的概念
维纳运动(Wiener Process),也称为标准布朗运动,是一种重要的随机过程,广泛应用于数学、物理学和金融学等领域。它是一个连续时间的随机过程,具有一些特殊的性质,使其成为描述随机动态系统的经典…...

毫秒级查询性能优化实践!Apache Doris 在极越汽车数字化运营和营销方向的解决方案
作者:韩同阳,极越汽车大数据架构师,Apache Doris Active Contributor 编辑整理:SelectDB 技术团队 导读:极越是高端智能汽车机器人品牌,基于领先的百度 AI 能力和吉利 SEA 浩瀚架构生态赋能,致…...