1、 临界区(CCriticalSection)

当多个线程访问一个独占性共享资源时,可以使用临界区对象。拥有临界区的线程可以访问被保护起来的资源或代码段,其他线程若想访问,则被挂起,直到拥有临界区的线程放弃临界区为止。

2、事件(CEvent)

事件机制,分为自动重置事件对象和人工重置事件对象;

  • 自动重置事件对象,一旦被触发(有信号,setEvent(h)),那么等待的所有线程中将只有一个线程能获得事件对象的句柄h,并同时自动的将此事件对象设置为无信号的,只有当这个线程执行完了,并且调用了setEvent(h)来触发这个事件对象,那么其他的线程才获得,总之每次只能有一个等待的线程获得事件对象,因为只要其中一个线程获得了此事件对象h,那么就会自动的将h设置成为无信号的状态,直到调用setEvent(h)来触发这个事件对象;它能够确保一个线程独占对一个资源的访问。
  • 人工重置事件对象,一旦被触发(有信号,setEvent(h)),那么等待此事件对象的所有线程都将变成可调度的状态,CUP会随机的分配CPU时间给等待的所有线程,这些线程将同步的、随机的获取CPU的时间,来执行线程中的代码。

3、互斥量(CMutex)

互斥量对象(包含一个线程ID,能够知道是哪个线程访问了他)能够确保一个线程独占对一个资源的访问。

1)如果线程ID为0(无效线程ID),那么互斥量将不为任何线程所占有,他处于触发状态;

2)如果线程ID为非零,那么有一个线程已经占用了这个互斥量,它处于未触发的状态;

假设线程视图等待一个未触发的互斥量对象,在这种情况下,线程通常会进入等待状态,但是,系统会检查想要获得互斥量的线程的线程ID与互斥量对象内部记录的线程ID是否相同,如果相同,那么系统会让线程保持可调度状态,即使该互斥量尚未触发。

互斥量与临界区的行为完全相同,但是区别如下:互斥量是内核对象,临界区是用户模式下的同步对象,执行速度快于内核对象

4、信号量(CSemphore)

信号量与其他所有内核对象相同,但是另外又包含了两个32位的值:
一个是最大资源计数,一个是当前资源计数。

  1. 最大资源计数表示信号量可以控制的最大资源数量(这个是在创建信号量的时候就已经设定好了);
  2. 当前资源计数表示信号量当前可用资源数量;

信号量的规则如下:

  1. 如果当前资源计数大于0,那么信号量处于触发状态;
  2. 如果当前资源计数等于0,那么信号处于未触发状态;
  3. 系统绝对不会让当前资源计数变为负数;
  4. 当前资源计数绝对不会大于最大资源计数。

扩展内容(线程的同步方法)相关推荐

  1. php鼠标悬浮显示,CSS3实现鼠标悬停显示扩展内容

    本文给大家分享css3代码实现鼠标悬停显示要扩展的内容,在空间过于拥挤时需要隐藏部分内容使用此功能比较好,下面小编给带来了具体实现代码,一起看看吧 我们在做导航标签的时候,有时会出现空间过于拥挤需要隐 ...

  2. 音视频方案,音视频扩展内容- 音视频数据解析,码流分析及质量评价(笔记)3

    -- 音视频编解码流程如下图: -- 关于音频各种参数: freq:音频数据的采样率.常用的有48000,44100等. format:音频数据的格式.举例几种格式: AUDIO_U16SYS:Uns ...

  3. Markdown快速入门和扩展内容(Typora)

    ​ Markdown是一种可以使用普通文本编辑器编写的标记语言,通过类似HTML的标记语法,它可以使普通文本内容具有一定的格式.但是它本身是不支持修改字体.字号与颜色等功能的!   CSDN-mark ...

  4. DeepLearning | Zero Shot Learning 零样本学习(扩展内容、模型、数据集)

    之前写过一篇关于零样本学习的博客,当时写的比较浅.后来导师让我弄个ppt去给本科生做一个关于Zero Shot Learning 的报告,我重新总结了一下,添加了一些新的内容,讲课的效果应该还不错,这 ...

  5. 音视频方案,音视频扩展内容(RTMP,FFMpeg/H.26*/mpeg*/AVC等标准与协议)(笔记)1,视频格式

    视频方案,雷霄骅的专栏- http://blog.csdn.net/leixiaohua1020  > SI, TI   ITU-R BT.1788建议使用时间信息(TI,Temporal pe ...

  6. 扩展内容(进程的通信方式)

    管道 1) 管道是半双工的,数据只能向一个方向流动:需要双方通信时,需要建立起两个管道: 2) 匿名管道只能用于具有亲缘关系的进程,有名管道则没有限制. 3) 单独构成一种独立的文件系统:管道对于管道 ...

  7. CSS进阶(4)- 扩展内容

    本系列笔记是基于[渡一教育]袁进老师的html+css基础课程而记录,仅作为个人记录以及阅读使用. 文章目录 浮动的细节规则 行高的取值 body背景 行盒的垂直对齐 多个行盒垂直方向上的对齐 图片的 ...

  8. 音视频方案,音视频扩展内容(编码解码器) (笔记)2

    视频方案,雷霄骅的专栏- http://blog.csdn.net/leixiaohua1020 > LAV Filter   LAV Filter 是一款开源的DirectShow视频分离和解 ...

  9. java 中有几种方法可以实现一个线程?用什么关键字修饰同步方法 ? stop() 和 suspend() 方 法为何不推荐使用?

    60 . java 中有几种方法可以实现一个线程?用什么关键字修饰同步方法 ? stop() 和 suspend() 方 法为何不推荐使用? 答: 有两种实现方法,分别是继承 Thread类与实现Ru ...

最新文章

  1. redis缓存和cookie实现Session共享
  2. 半透明遮罩层覆盖整个可视区域
  3. 表框mysql_mysql 表的操作
  4. 区分各浏览器的CSS hack(包括360、搜狗、opera)
  5. 结合源码分析 bubble 使用注意事项
  6. 20145302张薇《Java程序设计》实验三报告
  7. android opencv 水印,关于opencv对图片添加水印
  8. Python+pandas使用重采样技术按时间段查看员工业绩
  9. mysql 热迁移,proxmox迁移详解
  10. 如何选择云服务器与轻量应用服务器?谈谈自己的看法
  11. Zephry I2C和SPI驱动器介绍和操作FM24V10闪存
  12. 如何批量把照片设置统一尺寸?
  13. php导出excel 繁体,php导出excel并解决乱码问题的方法介绍
  14. 万里汇WorldFirst支持从PayPal提现美元(实战教程)
  15. 10015---SpringMVC--自定义视图
  16. 戴尔电脑重装系统的blos设置
  17. STM32WL LoRaWAN节点设备学习记录(一)
  18. ARM 嵌入式系统开发 - 软件设计与优化
  19. bread 块设备读取函数解析(1)
  20. 微信支付服务商java_微信APP支付服务商和子商户的流程模式

热门文章

  1. 换种思路去理解设计模式
  2. cocos2d-x游戏实例(28)-简易动作游戏(6)
  3. 标准STUN判断NAT类型的过程及改进
  4. Python 多进程pool.map()方法的使用
  5. Linux网络IO精华指南
  6. 多图 | 操作系统中,进程与线程怎么设计的?
  7. 这里有一份面筋请查收(七)
  8. Java多线程知识小抄集(三)
  9. XMC-GAN:从文本到图像的跨模态对比学习
  10. VVC专利池最新进展:MC-IF正在召集专利拥有者