windows核心编程-信号量内核对象
来源:互联网 发布:网络男歌手比较慢的歌 编辑:程序博客网 时间:2024/05/06 19:03
信号量内核对象用来对资源进行计数。与其他内核对象不同的是,它还包含了两个32位值:一个最大资源计数和一个当前资源计数。
最大资源表示信号量可以控制的最大资源数量,当前资源计数表示信号量当前可用的资源的数量。
HANDLE WINAPI CreateSemaphore( _In_opt_ LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, //安全属性 _In_ LONG lInitialCount, //表示这些资源一开始有多少个可供使用 _In_ LONG lMaximumCount, //能够处理的资源最大数量 _In_opt_ LPCTSTR lpName );当前资源计数大于零:信号量处于触发状态
等于零:未触发状态
可以用OpenSemaphore来得到已经存在的信号量的句柄
HANDLE WINAPI OpenSemaphore( _In_ DWORD dwDesiredAccess, _In_ BOOL bInheritHandle, _In_ LPCTSTR lpName);
HANDLE hSemaphore =CreateSemaphore(NULL,0,5,NULL);
创建一个信号量,最大资源数为5,但是一开始只有0个资源可供使用,所以信号量未被触发。
信号量最大的优势是他们会以原子方式来执行这些设置和操作,也就是说,当我们向信号量请求
一个资源的时候,操作系统会检查资源是否可用,并将资源的数量递减,整个过程不会被线程打断。
只有当资源计数递减完成之后,系统才会允许另一个线程请求对资源的访问。
线程通过ReleaseSemaphore来递增信号量的当前资源计数
BOOL WINAPI ReleaseSemaphore( _In_ HANDLE hSemaphore, _In_ LONG lReleaseCount, _Out_opt_ LPLONG lpPreviousCount);
这个函数只是把IReleaseCount的值加到信号量的当前资源计数上。通常我们会传1给IReleaseCount函数,
但是很少有程序用到它,所以可以直接传NULL忽略它。
0 0
- windows核心编程-信号量内核对象
- windows核心编程--内核对象
- windows核心编程--内核对象
- Windows核心编程:内核对象
- windows核心编程--内核对象
- 内核对象 《Windows核心编程》
- Windows核心编程 内核对象
- Windows核心编程:内核对象
- windows核心编程---内核对象
- 【Windows 核心编程】Windows 核心编程 -- 内核对象
- 《windows核心编程》学习笔记 内核对象
- WINDOWS核心编程--第二章内核对象
- windows核心编程第三章--内核对象
- 关于Windows核心编程中的内核对象
- windows核心编程<读书笔记三>内核对象
- WINDOWS核心编程学习1------内核对象
- windows核心编程心解--内核对象
- Windows核心编程笔记---内核对象
- Java 多态:动态绑定 及 内部实现机制
- <dl>定义列表
- CSDN的MarkDown语法知识
- 博客笔记161207(java操作execl)
- JsonWEBtokens生成
- windows核心编程-信号量内核对象
- 【EJB】——EJB宏观总结
- redis点滴(四) redis持久化
- 获取手机ip
- Javascript之匿名函数
- 随机生成8位数授权码
- bzoj1195: [HNOI2006]最短母串
- Java UDP封装类
- php判断是不是微信浏览器