笔记9.18

线程之间的通信是指在多线程程序中,不同线程之间如何交换数据或协调工作。这种通信对于实现复杂的并发程序是至关重要的。以下是几种常见的线程间通信方式:

  1. 共享内存

    • 这是最直接的方式,多个线程通过读写同一块内存区域(如全局变量)来交换信息。但是这种方式需要特别注意同步问题,比如使用互斥锁(Mutex)、信号量(Semaphore)等机制来防止数据竞争和死锁。
  2. 消息传递

    • 在某些编程环境中,线程可以通过发送消息来进行通信。每个线程都有自己的私有队列,消息被放入接收者的队列中等待处理。这种方式可以减少线程间的耦合度,并且易于实现非阻塞操作。
  3. 管道(Pipes)

    • 管道是一种进程间通信方式,也可以用于线程间通信。一个线程写入管道的数据可以被另一个线程读取。管道分为匿名管道和命名管道两种类型,前者只能用于具有亲缘关系的进程间通信,后者则不受此限制。
  4. 信号(Signals)

    • 信号是一种异步通知机制,当某个特定事件发生时,系统会向进程发送一个信号。虽然信号主要用于进程间通信,但在某些情况下也可以用作线程间通信的一种手段。
  5. 条件变量(Condition Variables)

    • 条件变量通常与互斥锁一起使用,允许一个或多个线程等待直到某个特定条件为真。这在实现生产者-消费者模式等场景中非常有用。
  6. 事件(Events)

    • 事件对象提供了一种简单的同步机制,其中一个线程设置事件的状态,而其他线程可以等待该状态的变化。这在Windows操作系统中尤其常见。
  7. 屏障(Barriers)

    • 屏障是一种同步点,所有到达这个点的线程都会被阻塞,直到所有参与的线程都到达了这个点。这是实现多线程协作完成任务的一种有效方法。
  8. 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:用于控制变量的存储方式和作用域,可以用于局部变量、全局变量和类成员变量。
    两者在用途和特性上有明显的区别,但在实际编程中经常结合使用,以实现更复杂的功能和更好的代码组织。

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

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

相关文章

bprc二次封装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、封装的思想二、封装单个服务的信道管理类1.成员变量2.成员函数 三、封装总体的服务信道管理类1.成员变量2.成员函数 四.etcd和brpc联合测试1.服务注册客户端2.服…

透明屏幕有普通屏幕有哪些优点

针对透明玻璃屏幕的安装方案&#xff0c;我们需要综合考虑多个因素&#xff0c;包括安装环境、屏幕尺寸、重量、安全要求以及视觉效果等。以下是一个概括性的安装方案框架&#xff0c;供您参考&#xff1a; 一、前期准备 1.1 需求分析 明确透明玻璃屏幕的使用场景&#xff08…

聊聊对别人表示真正的关注

在工作和生活中,那些重要人士所得到的关注已经很多了&#xff0c;所以你不能只关注那些重要的人&#xff0c;对那些保洁门卫、前台等也需要我们给予真心的关注。 他们可使你的生活正常有序&#xff0c;但却经常被你忽略&#xff0c;见面打个招呼时常跟他们聊一聊&#xff0c;这…

C++速通LeetCode中等第4题-三数之和

解题思路&#xff1a;先排序&#xff0c;固定第一个数&#xff0c;用两个指针分别指向右侧剩余数列的两端&#xff0c;右侧向左移动直到两指针重合&#xff0c;看三数合有没有解&#xff0c;指针遇到相同数字跳过。 class Solution { public:vector<vector<int>> …

Spring Session

Session 共享问题 在 Web 项目开发中&#xff0c;Session 会话管理是一个很重要的部分&#xff0c;用于存储与记录用户的状态或相关的数据。 通常情况下 session 交由容器&#xff08;tomcat&#xff09;来负责存储和管理&#xff0c;但是如果项目部署在多台 tomcat 中&#…

【Unity3D小技巧】Unity3D中使用EventTrigger对3D物体的响应

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群:398291828大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 1-1、EventTrigger简介 EventTrigger是Unity中用于处理UI事件的一个组件。它允许我们为UI元…

什么是区块链,以及应用场景

一、引言 在当今数字化时代&#xff0c;区块链技术作为一种新兴的分布式账本技术&#xff0c;正逐渐引起广泛关注。它具有去中心化、不可篡改、透明性等特点&#xff0c;为解决传统中心化系统中的信任问题提供了新的思路。本文将介绍区块链的基本概念、工作原理以及其在各个领域…

【数据库】MySQL内置函数

本篇分享一些在MySQL中常见的一些内置函数&#xff0c;如日期函数&#xff0c;字符串函数和数学函数&#xff0c;以方便于操作数据库中的数据。 1.日期函数 我们先整体观察一下这些函数再讲解案例 日期函数使用起来都非常就简单 获得年月日&#xff1a; select current_dat…

甘特图介绍

甘特图&#xff08;Gantt chart&#xff09;是一种常用于项目管理和计划安排的图表类型&#xff0c;它以图形的方式展示项目的任务、活动或工作流的时间线。甘特图得名于它的发明者亨利劳伦斯甘特&#xff08;Henry Laurence Gantt&#xff09;&#xff0c;他在20世纪初开发了这…

C++ 面试模拟02

第一部分&#xff1a;基础知识 什么是拷贝构造函数和赋值运算符&#xff1f;它们之间有什么区别&#xff1f;在 C 中&#xff0c;const 关键字的作用是什么&#xff1f;有哪些常见用法&#xff1f;C 中的内存管理机制是怎样的&#xff1f;如何避免内存泄漏&#xff1f;虚函数&…

为解决bypy大文件上传报错—获取百度云文件直链并使用Aria2上传文件至服务器

问题描述 一方面组内的服务器的带宽比较小&#xff0c;另一方面使用bypy方式进行大文件(大于15G)上传时会报错&#xff08;虽然有时可以成功上传&#xff0c;但是不稳定&#xff09;&#xff1a; 解决方式 总体思路: 获得云盘需要下载文件的直链复制直链到服务器中使用自带…

24年蓝桥杯及攻防世界赛题-MISC-3

21 reverseMe 复制图片&#xff0c;在线ocr识别&#xff0c;https://ocr.wdku.net/&#xff0c;都不费眼睛。 22 misc_pic_again ┌──(holyeyes㉿kali2023)-[~/Misc/tool-misc/zsteg] └─$ zsteg misc_pic_again.png imagedata … text: “$$KaTeX parse error: Undefined…

Excel快速填充颜色,快捷键真香

大家好&#xff0c;这里是效率办公指南&#xff01; &#x1f3a8; 在Excel中工作时&#xff0c;我们经常需要对单元格进行颜色填充&#xff0c;以突出显示重要数据或增加视觉可读性。今天&#xff0c;我们将分享几种快速填充颜色的方法&#xff0c;帮助你提高工作效率&#x…

2024最新!!!iOS高级面试题,全!(一)

TCP,HTTP,HTTPS&#xff0c;,WebSokect 区别&#xff1a; IP协议&#xff08;网络层协议&#xff09; TCP&#xff1a;传输控制协议&#xff0c;主要解决数据如何在网络中传输&#xff0c;面向连接&#xff0c;可靠。&#xff08;传输层协议&#xff09; UDP&#xff1a;用户数…

Istio:微服务网格的强大工具,Istio介绍

什么是Istio&#xff1f; 在现代软件开发中&#xff0c;微服务架构已经成为构建可扩展、灵活系统的首选方法。然而&#xff0c;随着微服务数量的增加&#xff0c;服务间的通信、监控和管理变得越来越复杂。为了解决这些问题&#xff0c;服务网格&#xff08;Service Mesh&…

Golang使用ReverseProxy实现反向代理

目录 1.源码结构体 2.官方单机示例 3.使用示例 4.简单的http服务&#xff08;用于测试&#xff09; 1.源码结构体 type ReverseProxy struct {// Rewrite 必须是一个函数&#xff0c;用于将请求修改为要使用 Transport 发送的新请求。然后&#xff0c;其响应将原封不动地…

解决mybatis plus 中 FastjsonTypeHandler无法正确反序列化List类型的问题

由于是根据自动映射类型&#xff0c;我们设置的字段类型是List 也就是反序列化的时候也只是用 FastjsonTypeHandler中的 Override protected Object parse(String json) { return JSON.parseObject(json, type); } 反序列化方法&#xff0c;这是type为List 反序列后我们并没…

C++11: 声明和定义

声明与定义是C/C中两个核心的概念&#xff0c;也是C/C区别于其他语言独有的特性。它们对程序的编译和链接过程起着至关重要的作用。 一、C标准的描述 声明&#xff08;Declaration&#xff09;&#xff1a;声明告诉编译器某个实体&#xff08;如变量、函数、类等&#xff09;…

用ASR PRO离线语音芯片和月饼盒做一个会跑会跳会说话的机器狗

中秋节刚过&#xff0c;大家月饼盒应该还有&#xff0c;不要扔&#xff0c;可以做点小玩意。 机器狗的创意来自B站石桥北的视频&#xff0c;他使用了一块ESP32芯片和打印件加四个舵机实现&#xff0c;应该说是比较复杂的&#xff0c;需要有3D打印机打印外壳&#xff0c;还得会…

Linux标准IO-系统调用详解

1.1 系统调用 系统调用&#xff08;system call&#xff09;其实是 Linux 内核提供给应用层的应用编程接口&#xff08;API&#xff09;&#xff0c;是 Linux 应用层进入内核的入口。不止 Linux 系统&#xff0c;所有的操作系统都会向应用层提供系统调用&#xff0c;应用程序通…