笔记9.18
线程之间的通信是指在多线程程序中,不同线程之间如何交换数据或协调工作。这种通信对于实现复杂的并发程序是至关重要的。以下是几种常见的线程间通信方式:
-
共享内存:
- 这是最直接的方式,多个线程通过读写同一块内存区域(如全局变量)来交换信息。但是这种方式需要特别注意同步问题,比如使用互斥锁(Mutex)、信号量(Semaphore)等机制来防止数据竞争和死锁。
-
消息传递:
- 在某些编程环境中,线程可以通过发送消息来进行通信。每个线程都有自己的私有队列,消息被放入接收者的队列中等待处理。这种方式可以减少线程间的耦合度,并且易于实现非阻塞操作。
-
管道(Pipes):
- 管道是一种进程间通信方式,也可以用于线程间通信。一个线程写入管道的数据可以被另一个线程读取。管道分为匿名管道和命名管道两种类型,前者只能用于具有亲缘关系的进程间通信,后者则不受此限制。
-
信号(Signals):
- 信号是一种异步通知机制,当某个特定事件发生时,系统会向进程发送一个信号。虽然信号主要用于进程间通信,但在某些情况下也可以用作线程间通信的一种手段。
-
条件变量(Condition Variables):
- 条件变量通常与互斥锁一起使用,允许一个或多个线程等待直到某个特定条件为真。这在实现生产者-消费者模式等场景中非常有用。
-
事件(Events):
- 事件对象提供了一种简单的同步机制,其中一个线程设置事件的状态,而其他线程可以等待该状态的变化。这在Windows操作系统中尤其常见。
-
屏障(Barriers):
- 屏障是一种同步点,所有到达这个点的线程都会被阻塞,直到所有参与的线程都到达了这个点。这是实现多线程协作完成任务的一种有效方法。
-
static 和 const 是 C/C++ 中常用的两个关键字,它们各自有不同的用途和特性。下面详细解释两者的区别:
const
const 关键字用于声明一个常量,表示该变量的值在初始化后不能被修改。const 可以应用于各种数据类型,包括基本数据类型、指针、函数参数等。特点:
不可变性:一旦初始化,const 变量的值不能被改变。
存储位置:const 变量通常存储在只读内存区域,编译器会对其进行优化。
作用域:const 变量的作用域取决于其声明的位置。可以在局部作用域(函数内部)或全局作用域声明。
示例:const int a = 10; // 全局常量 void func() {const int b = 20; // 局部常量 }
static
static 关键字用于控制变量的存储方式和作用域。它主要有以下几个用途:1. 静态局部变量:
在函数内部声明的 static 变量在函数调用之间保持其值。
初始化:静态局部变量只在第一次进入函数时初始化一次。
生命周期:静态局部变量的生命周期贯穿整个程序运行期。
作用域:静态局部变量的作用域仍然限于声明它的函数内部。
示例:void func() {static int count = 0;count++;std::cout << "Count: " << count << std::endl; }
2. 静态全局变量:
在文件作用域内声明的 static 变量仅在声明它的文件内可见,不能被其他文件访问。
初始化:静态全局变量在程序启动时初始化。
生命周期:静态全局变量的生命周期贯穿整个程序运行期。
作用域:静态全局变量的作用域限于声明它的文件。
示例:// file1.cpp static int globalVar = 10;void func1() {std::cout << "globalVar: " << globalVar << std::endl; }// file2.cpp // int globalVar; // 这里无法访问 file1.cpp 中的 globalVar
3. 静态成员变量:
在类中声明的 static 成员变量属于类本身,而不是类的任何特定对象。
初始化:静态成员变量必须在类外部初始化。
生命周期:静态成员变量的生命周期贯穿整个程序运行期。
作用域:静态成员变量的作用域限于声明它的类。
示例:class MyClass { public:static int staticVar; };int MyClass::staticVar = 0; // 静态成员变量的初始化void func() {MyClass::staticVar++;std::cout << "StaticVar: " << MyClass::staticVar << std::endl; }
总结
const:用于声明常量,表示该变量的值在初始化后不能被修改。
static:用于控制变量的存储方式和作用域,可以用于局部变量、全局变量和类成员变量。
两者在用途和特性上有明显的区别,但在实际编程中经常结合使用,以实现更复杂的功能和更好的代码组织。
相关文章:
笔记9.18
线程之间的通信是指在多线程程序中,不同线程之间如何交换数据或协调工作。这种通信对于实现复杂的并发程序是至关重要的。以下是几种常见的线程间通信方式: 共享内存: 这是最直接的方式,多个线程通过读写同一块内存区域࿰…...
时间序列8个基准Baseline模型及其详细解读
我是从去年11月份开始,选定时间序列预测这个方向,准备在工作之余继续独立进行一些科学研究。选定这个方向是因为我对金融量化一直挺感兴趣,希望能把时间序列中的深度学习算法模型,用到金融数据。现在看来,我太过于理想…...
将相机深度图转接为点云的ROS2功能包
depth_image_proc 是一个 ROS(Robot Operating System)包,它包含了一系列节点,用于处理来自深度相机的图像数据,并将其转换为点云。以下是 depth_image_proc 包中各个节点的作用: convert_metric_node&…...
计算机毕业设计选题推荐-共享图书管理系统-小程序/App
✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...
架构师:在 Spring Cloud 中实现全局异常处理的技术指南
1、简述 在分布式系统中,微服务架构是最流行的设计模式之一。Spring Cloud 提供了各种工具和库来简化微服务的开发和管理。然而,随着服务的增多,处理每个服务中的异常变得尤为复杂。因此,实现统一的全局异常处理成为了关键。本篇博客将介绍如何在 Spring Cloud 微服务架构…...
es由一个集群迁移到另外一个集群es的数据迁移
迁移es的数据 改下index的索引 就可以了。 查询 用curl -u就可以查询了...
java项目之常规应急物资管理系统(源码+文档)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的常规应急物资管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息。 项目简介: 基于SpringBootVue的…...
text2sql方法:RESDSQL和DAIL-SQL
之前介绍了text2sql的综述,但是对一些方法的描述不够详细,所以将一些感兴趣的方法思路也整理一下。 RESDSQL RESDSQL出自2023年2月的论文《RESDSQL: Decoupling Schema Linking and Skeleton Parsing for Text-to-SQL》(github)。它使用seq2seq PLM(pr…...
Stable Diffusion 优秀博客转载
初版论文地址:https://arxiv.org/pdf/2112.10752 主要流程图: Latent Diffusion Models(LDMs) DDPM是"Denoising Diffusion Probabilistic Models"的缩写, 去噪扩散概率模型 博客: 【论文阅读…...
探索IT行业的无限潜力:技术、发展与职业前景
探索IT行业的无限潜力:技术、发展与职业前景 1. 引言 信息技术(IT)已经彻底改变了我们的生活方式,从智能手机到云计算,IT无处不在。无论是公司管理系统、社交媒体,还是大数据分析平台,IT推动了…...
ESP32配网接入Wifi
1 ESP32的两种模式 AP模式:ESP32可以作为热点,手机和电脑等设备接入使用。 STA模式:ESP32可以作为作为客户端接入其他网络中。 2 流程 step1: ESP32上电后进入STA模式,尝试看能够接入网络 step2: 如何连接成功,则正常运行。如何连接超时,则自动进入AP模式,设置AP热点…...
前端-js例子:收钱转账
支付宝转账 在这里用到周期定时器setInterval(function,time),设置达到目标钱数时停止定时器。 点击转账按钮时,开始函数显示。 同时要确定输入框里输入的是数字。(有一定容错) window.onloadfunction(){var btn document.que…...
2024 BaseCTF repwn 部分wp
You are good at IDA 附件拖入ida。比较简单 UPX mini upx壳,无魔改,直接脱。脱完拖入ida。比较简单 Ez Xor 附件拖入ida 比较简单。脚本 ez_maze 附件拖入ida 一个宽为15的迷宫 BasePlus 附件拖入ida。变表base64再异或0xE 签个到吧 nc连上即得 echo nc…...
每日学习一个数据结构-倒排表
文章目录 示意图倒排表的基本概念倒排表的数据结构示例 倒排表的优点应用场景 倒排表(Inverted Index),也称为反向索引或倒排文件,在信息检索系统中是一种重要的数据结构。它主要用于快速搜索文档中的关键词,并找到包含…...
828华为云征文|部署在线文件管理器 Spacedrive
828华为云征文|部署在线文件管理器 Spacedrive 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 产品优势1.3 计费模式 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Spacedrive3.1 Spacedrive 介绍3.2 Docker 环境搭建3.3 Spac…...
Alluxio EnterpriseAI on K8s 部署教程
Alluxio Enterprise AI on K8s 部署视频教程 视频为Alluxio Enterprise AI on K8s 部署视频教程。下面内容将主要介绍如何通过 Operator(Kubernetes 管理应用程序的扩展)在 Kubernetes 上安装 Alluxio。 1. 系统要求 Kubernetes 至少1.19版本的 Kubern…...
鸿蒙OpenHarmony【轻量系统内核扩展组件(动态加载)】子系统开发
基本概念 在硬件资源有限的小设备中,需要通过算法的动态部署能力来解决无法同时部署多种算法的问题。以开发者易用为主要考虑因素,同时考虑到多平台的通用性,LiteOS-M选择业界标准的ELF加载方案,方便拓展算法生态。LiteOS-M提供类…...
Leetcode42. 接雨水
讲的好的视频讲解 【很难想象这up刷题的精神状态 Leetcode42. 接雨水】 https://www.bilibili.com/video/BV1MC411n7Af/?share_sourcecopy_web&vd_sourceafbacdc02063c57e7a2ef256a4db9d2a rm是right max的意思,lm是left max的意思 时间复杂度: O (…...
dbt snapshot命令及应用示例
DBT是一种功能强大的数据转换工具,它使数据分析师和工程师能够更有效地转换仓库中的数据。dbt的一个关键特性是能够创建快照,这是跟踪数据随时间变化的一种方法。本文带你一起完成创建和使用dbt快照的过程。 理解缓慢变化维度 缓慢变化维度(scd)是数据仓…...
JavaEE: 深入探索TCP网络编程的奇妙世界(四)
文章目录 TCP核心机制TCP核心机制四: 滑动窗口为啥要使用滑动窗口?滑动窗口介绍滑动窗口出现丢包咋办? TCP核心机制五: 流量控制 TCP核心机制 书接上文~ TCP核心机制四: 滑动窗口 为啥要使用滑动窗口? 之前我们讨论了确认应答策略,对每一个发送的数据段,都要给一个ACK确…...
企业级应用如何通过Taotoken聚合API管理多个大模型调用
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业级应用如何通过Taotoken聚合API管理多个大模型调用 在构建企业级AI应用时,一个常见的需求是同时接入多个不同厂商的…...
GEO优化的时间窗口期:从流量分发到语义占位的技术范式转移
过去几十年,互联网的信息检索逻辑建立在倒排索引与超链接分析的基础之上:用户输入关键词,搜索引擎通过爬虫抓取并返回链接列表,网站则通过SEO(搜索引擎优化)争夺SERP(搜索结果页)的排…...
Unity ShaderGraph实战指南:从美术协作到URP渲染优化
1. 为什么我劝新手别急着写Shader代码——从一个被美术追着问“这个效果能不能加”的下午说起 去年冬天,我在一家做AR教育产品的团队里做技术美术。那天下午三点,UI组的同事抱着iPad冲进我工位:“老师,这个粒子光晕要加呼吸感&…...
UE5场景漫游跳转避坑指南:从UI交互到资源预热
1. 这不是“做个UI跳个关卡”那么简单:UE5场景漫游的起点陷阱 很多人拿到“UE5场景漫游——开始界面及关卡跳转”这个需求,第一反应是:“不就是加个UMG按钮,绑个OpenLevel节点?”我去年带三个实习生做文旅数字孪生项目…...
从芯片到产品:嵌入式AI与安全设计实战解析
1. 项目概述:一次面向未来的技术对话最近,我作为启扬智能的一员,有幸参与了「2025恩智浦技术巡回研讨会」的线下活动。这不仅仅是一次简单的产品展示或技术宣讲,更像是一场与产业链上下游伙伴、众多开发者同行进行的深度技术对话。…...
课堂教学PPT模板平台深度测评与选用指南
一、引言:PPT—— 课堂教学的重要辅助工具在当今的课堂教学中,PPT 已经成为了教师们不可或缺的 “魔法道具”。一份精心设计的 PPT,就像一位无声的助教,能够将抽象的知识变得直观形象,将枯燥的内容变得生动有趣。它不仅…...
Medium作者收益预测模型:轻量可解释的写作价值评估系统
1. 项目概述:这不是一个“预测收入”的模型,而是一套写作者价值评估系统你点开这个标题,第一反应可能是:“哦,又一个用机器学习算稿费的工具?”——但实际远不止如此。Medium writer earnings(M…...
解决RK3568上QML卡顿的实战:从怀疑供应商到亲手编译带OpenGL ES2的Qt 5.14.2
RK3568嵌入式开发实战:破解QML卡顿之谜与OpenGL ES2编译全解析 当你在RK3568开发板上运行精心设计的QML界面时,却发现动画效果卡顿得像幻灯片播放——这种体验足以让任何嵌入式开发者抓狂。本文记录了一位开发者从发现问题到最终解决的完整历程ÿ…...
CANN/asc-devkit MakeNDLayout函数
MakeNDLayout 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.c…...
6. 网络优化方法之 学习率 优化/衰减策略
1. 学习率优化如图:学习率0.01时收敛速度很慢,学习率0.1时收敛速度变快,学习率越大 收敛速度越快; 学习率0.2 即学习率较大是会 来回震荡,学习率0.3 即学习率过大时会发生 梯度爆炸(即远远超出所在范围&…...
