野火RTT第21章事件
2018年12月29日
10:47

事件也是线程间通信,仅用于实现线程间同步,而不能传输数据。可以在中断中发送事件。

一对多:一个线程等待多个事件触发:多个事件中的任意一个发生就能唤醒线程这也叫独立型同步(逻辑或),也可以多个事件发生后才能唤醒线程,也叫关联型同步(逻辑与)。也就是:多个事件只是针对这一个线程,这多个事件只和某个线程绑定,这么多事件的触发只对一个线程有效,只决定一个线程的生死。实现方式:一个32为变量代表32种类型事件触发状态,而这个变量只能被某个线程使用,不对外开放。

多对多:多个线程等待多个事件的触发。多个事件触发的不仅仅局限于一个线程了,可以触发多个线程。也就是多个事件和好几个线程绑定,多个事件触发不仅一个线程。这种实现方式:多个变量多个线程都能使用,很开放。

事件的代码表示实现方式:用32位变量表示32种事件。
线程通过逻辑与或逻辑或与事件产生联系。
裸机中的全局标志变量在操作系统中得转化成事件。
事件的应用:检测危险动作的满足条件。
中断中可以向事件对象发送事件。
事件的发送操作是不累计的。
使用完事件后要清零对应事件。
发送事件会触发线程调度。
当这个事件只发生一次再也不会发生,那可以删除掉这个事件的。

1.事件发送函数:若事件置0标志,返回错误,发送只会置1,清零函数才会清零。然后若在这期间没有线程来获取事件而被阻塞就不用开启调度,直接退出,置完这就算完了。若有被阻塞的线程,则遍历被阻塞的线程,若有满足其线程恢复的条件则将其线程恢复,并执行调度。进入恢复被阻塞的线程。事件发生了,就调用事件发送函数置标志位。
2.事件接受函数,判断是否满足线程运行所需事件,不满足就根据超时设置对线程进行阻塞、返回错误码等,同时将接受的条件(标志位几个事件标志都要置起或多个事件其中一个触发)、还有清零等设置保存到对应线程控制块的事件成员中。

接受事件阻塞线程,发送事件中判断是否满足接受事件函数输入的参数,如果满足就恢复阻塞线程,刚好继续上次那个地点继续运行,因为一旦回来运行说明已经是满足条件了。
接受和发送事件都有判断是否满足条件,接受判断不满足阻塞,发送不满足不恢复阻塞线程直到满足才恢复阻塞线程

RTT的线程同步篇——事件相关推荐

  1. RTT的线程同步篇——异常管理

    野火RTT第25章异常 2018年12月29日 10:47 一.中断中使用RRT的IPC通信机制. 异常分为同步异常和异步异常. 中断属于异步异常. RTT建议在中断中采用信号量.消息.事件来标记. ...

  2. RTT的线程同步篇——总结

    一.信号量和互斥量的区别 2018年12月29日 10:47 信号量强调做事的步骤,有先后. 信号量可以在任何任务.中断里释放信号量,释放了你才能做下一步. 信号量可能发生优先级翻转. 信号量不能递归 ...

  3. RTT的线程同步篇——互斥量

    野火RTT第20章互斥量 2018年12月29日 10:47 互斥量不能在中断服务程序中使用. 互斥量是特殊的二值信号量,其"特殊"在哪呢?互斥量不同于二值信号量的地方在于:互斥量 ...

  4. RTT的线程同步篇——信号量

    野火RTT 19章信号量 2018年12月29日 10:46 相当于裸机中的标志 信号量:实现线程间的通信,实现线程间的同步货临界资源的互斥访问. 多线程系统中,线程间需要同步或互斥实现临界资源保护. ...

  5. C++线程同步之事件(生产者与消费者问题)

    #include <windows.h> #include <stdio.h>HANDLE g_hSet = NULL; HANDLE g_hClear = NULL; HAN ...

  6. Chapter09-内核模式下的线程同步之事件内核对象

    有两种事件内核对象:自动事件和手动事件.当手动事件被触发时,所以该事件的等待线程都编程可调度状态:而自动事件被触发时,只有个一个等待该事件线程变成可调度状态. 下面再逐个讲解Event的相关函数: a ...

  7. C#多线程之线程池篇1

    在C#多线程之线程池篇中,我们将学习多线程访问共享资源的一些通用的技术,我们将学习到以下知识点: 在线程池中调用委托 在线程池中执行异步操作 线程池和并行度 实现取消选项 使用等待句柄和超时 使用计时 ...

  8. 秒杀多线程第六篇 经典线程同步 事件Event

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇 一个经典的多线程同步问题> <秒杀多线程第五篇 经典线程同步关键段CS> 上一篇中使用关键段来解决经典的多线程同步互斥问题 ...

  9. 秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量

    前面<秒杀多线程第四篇一个经典的多线程同步问题>提出了一个经典的多线程同步互斥问题,这个问题包括了主线程与子线程的同步,子线程间的互斥,是一道非常经典的多线程同步互斥问题范例,后面分别用了 ...

最新文章

  1. Blender和Substance Painter制作科幻装甲视频教程
  2. 浅析机器学习中的自由度
  3. 机器学习漫谈:深度学习的辉煌
  4. (3)段描述符,段选择子,LES指令
  5. FLOW福禄创始人朱萧木:如何通过产品设计助力品牌营销传播
  6. 网易创新企业大会圆满收官  看新技术和新商业如何撞出花火
  7. 线程池的 RejectedExecutionHandler(拒绝策略)
  8. 舍不得删的12个优质公号
  9. 【数据库系统】为什么使用SQL而非C/C++的函数库执行数据库查询操作
  10. spark学习-53-Spark下Java版HBase下的根据权重获取最真实数据
  11. 济群法师:《大乘百法明门论》讲记·视频·音频·MP3
  12. 将相同值的行内容进行合并操作--Sql2005
  13. 检测商品简码是否唯一,不重复
  14. L1-025__032
  15. java applica_下列关于 Java Application 程序在结构上特点的描述中,错误的是 ()_实用英语2答案_学小易找答案...
  16. 1.4树莓派SSH远程登录
  17. xxl子任务_XXL-JOB(1) 分布式任务系统选型和XXL-JOB介绍
  18. 破解word只读文档 word文档保护后的破解办法
  19. 小学生的搞笑考试卷子
  20. MSRA提出学习实例和分布式视觉表示的极端掩蔽模型ExtreMA

热门文章

  1. [转]游戏UI与flash 组件开发
  2. python在无人驾驶上的应用_无人驾驶(ADAS)方向的python软件工程师应具备哪些python模块的知识?...
  3. 交换ctrl和左caps_如何在Linux中交换Ctrl和Caps Lock键
  4. 道路建立拓扑关系的规则_建立真正社区关系的5条规则
  5. 我的新LulzBot Mini 3D打印机入门
  6. js 和 css动画
  7. Bootstrap创建进度条
  8. es6 作为属性名的 Symbol
  9. 深度学习笔记(31) 迁移与增强
  10. 三星s8android pie,三星更改Galaxy S8的Android Pie更新计划,添加Gala