当前位置: 首页 > news >正文

操作系统:线程间同步之事件集

        事件集是线程间同步的机制之一,一个事件集可以包含多个事件,利用事件集可以完成一对多、多对多的线程间同步。

目录

一、事件集举例说明

二、事件集工作机制

三、RT-Thread为实例说明

四、事件集的应用场合


一、事件集举例说明

以坐公交车为例:

        ①P1坐公交去某地,只有一个公交可以到达目的地,等到该公交即可出发。

        ②P1坐公交去某地,有三种公交都可以到达目的地,等到其中任意一辆即刻出发。

        ③P1约另一个人P2去某地视为线程,将“公交到达公交站”、“同伴P2到达公交站”视为事件的发生,情况①是特定事件环唤醒线程;情况②是任意单个事件唤醒线程;情况③是多个事件同时发生才唤醒线程。

二、事件集工作机制

        事件集主要用于线程间的同步,与信号量不同,它的特点是可以实现一对多,多对多的同步。即一个线程与多个的关系可设置为:其中任意一个事件唤醒线程,或几个事件都到达后才唤醒线程进行后续的处理;同样,事件也可以是多个线程同步多个事件。这种多个事件的集合可以用一个32位无符号整型变量来表示,变量的每一位代表一个事件,线程通过“逻辑与”或“逻辑或”将一个或多个事件关联起来,形成事件组合。事件的“逻辑或”也称为是独立型同步,指的是线程与任何事件之一发生同步;事件“逻辑与”也称为是关联型同步,指的是线程与若干事件都发生同步。

三、RT-Thread为实例说明

        1)事件只与线程相关,事件间相互独立:每个线程可拥有32个事件标志,采用一个32bit无符号整型数进行记录,每个bit代表一个事件;

        2)事件仅用于同步,不提供数据传输功能;

        3)事件无排队性,即多次向线程发送同一事件(如果线程还未来得及读的走),其效果等同于只发送一次。

        在RT-Thread中,每个线程都拥有一个事件信息标记,它有三个属性,分别是“与“、”或“和”清除标记”。当线程等待事件同步时,可以通过32个事件标志和这个事件信息标记来判断当前接收的事件是否满足同步条件。

        如图所示,线程#1的事件标志中第1位和第30位被置位,如果事件信息标记位设为逻辑与,则表示线程#1只有在事件1和事件30都发生以后才会被触发唤醒,如果事件信息标记位设为逻辑或,则事件1或事件30中的任意一个发生都会触发唤醒线程#1。如果信息标记同时设置了清除标记位,则当线程#1唤醒后将主动把事件1和事件30清零,否则事件标志将依然存在(即置1)。

四、事件集的应用场合

        事件集可适用于多种场合,它能够在一定程度上替代信号量,用于线程间同步。一个线程或中断服务例程发送一个事件给事件集对象,而后等待的线程被唤醒并对相应的事件进行处理。但是它与信号量不同的是,事件的发哦是那个操作在事件未清除前是不可累计的,而信号量的释放动作是累计的。事件的另一个特性是,接收线程可等待多种事件,即多个事件对应一个线程或多个线程。同时按照线程等待的参数,可选择是“逻辑与”还是“逻辑或”触发。这个特性也是信号量等所不具备的,信号量只能识别单一的释放动作,而不能同时等待多种类型的释放。

        如图所示,一个事件集包含32个事件集,特定线程只等待、接收它关注的事件。可以是一个线程等待多个事件的到来(线程1、2均等待多个事件,事件间可以使用“与”“或”逻辑触发线程),也可以是多个线程等待一个事

件的到来(事件25)。当有它们关注的事件发生时,线程将被唤醒并进行后续的处理动作。

相关文章:

  • 【人脸识别中的“类内差异”和“类间差异】
  • 关闭当前微信小程序解决方案
  • FFMPEG和opencv的编译
  • 音视频之H.265/HEVC编码框架及编码视频格式
  • Vue3.5 企业级管理系统实战(十四):动态主题切换
  • 行星际激波数据集 (2023)
  • 利用python从零实现Byte Pair Encoding(BPE)
  • Node.js中fs模块详解
  • 浏览器多开
  • MCP遇见Web3:从边缘计算到去中心化的无限想象
  • 【NLP解析】多头注意力+掩码机制+位置编码:Transformer三大核心技术详解
  • 自动驾驶技术关键技术梳理
  • 如何使用 Grafana 连接 Easyearch
  • 【HCIP】GRE VPN实验笔记
  • 遵循IEC 62304:构建安全可靠的医疗器械软件
  • [python]通过whl文件安装pyheif安装教程和简单使用案例
  • Linux进程通信入门:匿名管道的原理、实现与应用场景
  • 部署NFS版StorageClass(存储类)
  • Unity6国际版下载
  • Linux 一文快速入门
  • 移动端app开发公司/安徽网站关键字优化
  • 新网站建设一般多少钱/百度收录技术
  • 网站需求分析网站建设/北京刚刚宣布比疫情更可怕的事情
  • 深圳网站建设评价/百度信息流怎么做效果好
  • 独山县哪里有做网站的/创建网站的基本流程
  • apache 网站日志/seo推广和百度推广的区别