扩展内容(线程的同步方法)
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位的值:
一个是最大资源计数,一个是当前资源计数。
- 最大资源计数表示信号量可以控制的最大资源数量(这个是在创建信号量的时候就已经设定好了);
- 当前资源计数表示信号量当前可用资源数量;
信号量的规则如下:
- 如果当前资源计数大于0,那么信号量处于触发状态;
- 如果当前资源计数等于0,那么信号处于未触发状态;
- 系统绝对不会让当前资源计数变为负数;
- 当前资源计数绝对不会大于最大资源计数。
扩展内容(线程的同步方法)相关推荐
- php鼠标悬浮显示,CSS3实现鼠标悬停显示扩展内容
本文给大家分享css3代码实现鼠标悬停显示要扩展的内容,在空间过于拥挤时需要隐藏部分内容使用此功能比较好,下面小编给带来了具体实现代码,一起看看吧 我们在做导航标签的时候,有时会出现空间过于拥挤需要隐 ...
- 音视频方案,音视频扩展内容- 音视频数据解析,码流分析及质量评价(笔记)3
-- 音视频编解码流程如下图: -- 关于音频各种参数: freq:音频数据的采样率.常用的有48000,44100等. format:音频数据的格式.举例几种格式: AUDIO_U16SYS:Uns ...
- Markdown快速入门和扩展内容(Typora)
Markdown是一种可以使用普通文本编辑器编写的标记语言,通过类似HTML的标记语法,它可以使普通文本内容具有一定的格式.但是它本身是不支持修改字体.字号与颜色等功能的! CSDN-mark ...
- DeepLearning | Zero Shot Learning 零样本学习(扩展内容、模型、数据集)
之前写过一篇关于零样本学习的博客,当时写的比较浅.后来导师让我弄个ppt去给本科生做一个关于Zero Shot Learning 的报告,我重新总结了一下,添加了一些新的内容,讲课的效果应该还不错,这 ...
- 音视频方案,音视频扩展内容(RTMP,FFMpeg/H.26*/mpeg*/AVC等标准与协议)(笔记)1,视频格式
视频方案,雷霄骅的专栏- http://blog.csdn.net/leixiaohua1020 > SI, TI ITU-R BT.1788建议使用时间信息(TI,Temporal pe ...
- 扩展内容(进程的通信方式)
管道 1) 管道是半双工的,数据只能向一个方向流动:需要双方通信时,需要建立起两个管道: 2) 匿名管道只能用于具有亲缘关系的进程,有名管道则没有限制. 3) 单独构成一种独立的文件系统:管道对于管道 ...
- CSS进阶(4)- 扩展内容
本系列笔记是基于[渡一教育]袁进老师的html+css基础课程而记录,仅作为个人记录以及阅读使用. 文章目录 浮动的细节规则 行高的取值 body背景 行盒的垂直对齐 多个行盒垂直方向上的对齐 图片的 ...
- 音视频方案,音视频扩展内容(编码解码器) (笔记)2
视频方案,雷霄骅的专栏- http://blog.csdn.net/leixiaohua1020 > LAV Filter LAV Filter 是一款开源的DirectShow视频分离和解 ...
- java 中有几种方法可以实现一个线程?用什么关键字修饰同步方法 ? stop() 和 suspend() 方 法为何不推荐使用?
60 . java 中有几种方法可以实现一个线程?用什么关键字修饰同步方法 ? stop() 和 suspend() 方 法为何不推荐使用? 答: 有两种实现方法,分别是继承 Thread类与实现Ru ...
最新文章
- redis缓存和cookie实现Session共享
- 半透明遮罩层覆盖整个可视区域
- 表框mysql_mysql 表的操作
- 区分各浏览器的CSS hack(包括360、搜狗、opera)
- 结合源码分析 bubble 使用注意事项
- 20145302张薇《Java程序设计》实验三报告
- android opencv 水印,关于opencv对图片添加水印
- Python+pandas使用重采样技术按时间段查看员工业绩
- mysql 热迁移,proxmox迁移详解
- 如何选择云服务器与轻量应用服务器?谈谈自己的看法
- Zephry I2C和SPI驱动器介绍和操作FM24V10闪存
- 如何批量把照片设置统一尺寸?
- php导出excel 繁体,php导出excel并解决乱码问题的方法介绍
- 万里汇WorldFirst支持从PayPal提现美元(实战教程)
- 10015---SpringMVC--自定义视图
- 戴尔电脑重装系统的blos设置
- STM32WL LoRaWAN节点设备学习记录(一)
- ARM 嵌入式系统开发 - 软件设计与优化
- bread 块设备读取函数解析(1)
- 微信支付服务商java_微信APP支付服务商和子商户的流程模式