信号量内核对象:(semaphore)对资源进行计数:最大资源计数(表示信号量控制的最大资源的数目)、当前资源计数(表示信号量当前可用的资源数目)

信号量规则:1.如果当前资源计数大于0,信号量处于触发状态 2.如果当前资源计数等于0,那么信号量处于未触发状态

HANDLE CreateSemaphore(

    LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, // SD

    LONG lInitialCount, // initial count

    LONG lMaximumCount, // maximum count

    LPCT STRlpName// object name

);

CreateSemaphore() lInitialCount:表示一开始可以使用的资源数目,即当前资源计数;lMaximumCount:信号量对象可以处理的最大资源数量

WaitForSingleObject为等待函数,被用在所有的内核对象触发等待中。等待函数会检查信号量的当前资源使用计数,如果大于0,表示信号量处于触发状态,那么等待函数会把资源使用计数器减1,并让调用线程继续执行。如果等于0,表示信号量处于未触发状态,那么系统会让调用线程进入等待状态,直到被唤醒

BOOL ReleaseSemaphore(

HANDLE hSemaphore,

LONG lReleaseCount,

LPLONG lpPreviousCount

);

ReleaseSemaphore函数的作用是增加信号量的计数.即增加lReleaseCount个。

ReleaseSemaphore  lReleaseCount:释放自己使用的资源数目,加到信号量的当前资源计数上,通常会传1.   当一个线程使用完信号量对象控制的有限资源后,应该调用ReleaseSemaphore,释放使用的资源,使信号量对象的当前资源计数得到恢复。

信号量内核对象 semaphore相关推荐

  1. 线程同步--信号量内核对象

    信号量同步能够很好的解决线程执行顺序. HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitia ...

  2. 《Windows via C/C++》学习笔记 —— 内核对象的“线程同步”之“信号量”

    "信号量内核对象"用于对资源进行计数. 在信号量内核对象内部,和其他内核对象一样,有一个使用计数,该使用计数表示信号量内核对象被打开的次数. 信号量内核对象中还有两个比较重要的数据 ...

  3. 用内核对象进行线程同步

    本章讨论的是如何使用内核对象来对线程进行同步,与用户模式下的同步机制相比,内核对象的用途要广泛的多.实际上,内核对象唯一的缺点就是他们的性能.当我们调用本章任何一个新函数时,调用线程必须从用户模式切换 ...

  4. Windows核心编程学习九:利用内核对象进行线程同步

    注:源码为学习<Windows核心编程>的一些尝试,非原创.若能有助于一二访客,幸甚. 1.程序框架 #include "Queue.h" #include <t ...

  5. μC/OS-III---I笔记9---任务等待多个内核对象和任务内建信号量与消息队列

    在一个任务等待多个内核对象在之前,信号量和消息队列的发布过程中都有等待多个内核对象判断的函数,所谓任务等待多个内核对象顾名思义就是一任务同时等待多个内核对象而被挂起,在USOC-III中一个任务等待多 ...

  6. windows C/C++ 内核对象、事件对象、信号量

    承接上一篇:https://blog.csdn.net/uVarAndMethod/article/details/90360838 1.内核对象: 进程.线程.文件.文件映射.事件.互斥体等等 2. ...

  7. win32 c语言创建线程,【原创】win32线程及线程内核对象

    内核对象与GDI对象 GDI对象: 1. DC 2. 画笔 3. 画刷 内核对象 1. 进程 process 2. 线程 thread 3. 文件 file 4. 事件 envent 5. 信号量 s ...

  8. 【UCOSIII】UCOSIII的同时等待多个内核对象

    UCOSIII同时等待多个内核对象 前面讲述了UCOSIII的信号量(一个任务与另一个任务同步).事件标志组(一个任务与多个任务同步),它们都可以完成任务的同步.同时,信号量(保证全局变量).消息队列 ...

  9. 线程同步——内核对象实现线程同步——等待函数

    1 对于内核对象实现线程同步,不得不提三点: 2 1)大多数内核对象既有触发也有未触发两个状态 3 比如:进程.线程.作业.文件流.事件.可等待的计时器.信号量.互斥量 4 2)等待函数:等待函数使线 ...

  10. 应用程序对象正在关闭_Windows核心编程-内核对象

    概念:内核对象可以供系统和应用程序使用来管理各种各样的资源,Windows程序员可以调用Windows API去创建.打开和操作各种内核对象.常见的内核对象有:访问令牌.事件对象.文件对象.文件映射对 ...

最新文章

  1. 敏捷团队如何进行绩效考核?
  2. python删除mysql数据库_python 删除mysql数据库
  3. 的向上取整函数_计算机二级Excel常用函数解析
  4. python模块大全_哎呀,不错哦!3步带你用Python打造一款智能语音聊天小软件
  5. 浏览器 刷新页面后回到顶部_当你在浏览器中,忘记了曾经的登录密码怎么办......
  6. leetcode 448. 找到所有数组中消失的数字(Find All Numbers Disappeared in an Array)
  7. Silverlight socket组件
  8. 刚接触mybatis,很容易分不清#{id}和#{param1}的使用情况,本篇文章详解了两者的作用以及使用情况
  9. LDA线性判别原理解析<数学推导>
  10. Spark/Flink/CarbonData技术实践最佳案例解析
  11. SpringBoot的优点及缺点
  12. 【面试宝典】Mysql面试题大全
  13. 纪伯伦 《先知》 孩子
  14. html+css+js适合前端小白的实战全解(超详细)——2048小游戏(三)
  15. 你曾后悔进入 IT 行业吗?为什么?(转自知乎)--一生不悔入IT
  16. 营销活动此起彼伏,KTV加盟宝乐迪再掀新浪潮
  17. 《被讨厌的勇气》- 认真的人生活在当下
  18. linux设置java环境变量_linux配置java环境变量
  19. 水果店早读课:开水果店用什么进货,精品水果店从哪里进货
  20. 台式机显示计算机无gva输入,电脑显示器显示无视频输入怎么办

热门文章

  1. Java数据结构与算法(十) 图
  2. Oracle控制文件日志文件数据文件迁移
  3. 通过一个备份归档的脚本演示rsync限速和find如何删除文件
  4. CIO圈子—CIO成长交流的平台
  5. 链表的实现(Java语言描述)
  6. 自定义Button按钮
  7. perl:非贪婪的数量词
  8. 微信小程序的三级分销-项目表格设计
  9. JDK11即将来临,新特性了解一下
  10. vue运行报错:Cannot find module 'webpack/bin/config-yargs'