信号量计数值何时加1呢?

tanuser1 2003-09-24 08:03:09
搜索旧文档,发现以下内容,写得很好(见后):
现请问:
1. 信号量计数值何时加1呢?
2. 用CreateSemaphore函数创建信号量后,其计数值为多少?
3. <使用WaitForSingleObject等待函数,可以获得处于信号状态的信号量。>是否意味:就一直等待下去, 直到非信号状态,才将处理权交给线程?

我现在在看<WIN32多线程程序设计>,有些迷糊。
------------------------
程序使用信号量对资源进行计数,使用信号量可以统计可用资源的数量并分配资源。
用CreateSemaphore函数可以创建信号量,并返回其句柄。信号量保存[0-XXX]之间的记数值。
当计数值大于0时,信号量处于信号状态,即触发态;
当计数值等于0时,信号量处于非信号状态,即非触发态;

使用WaitForSingleObject等待函数,可以获得处于信号状态的信号量。
一旦WaitForSingleObject函数得到此信号量,将会使信号量的计数值减一,此时你可以处理资源分配的操作了。
--------------------------
...全文
71 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
tanuser1 2003-10-06
XieXie
回复
cnstar9988 2003-09-28
程序使用信号量对资源进行计数,使用信号量可以统计可用资源的数量并分配资源。
用CreateSemaphore函数可以创建信号量,并返回其句柄。信号量保存[0-XXX]之间的记数值。
当计数值大于0时,信号量处于信号状态,即触发态;
当计数值等于0时,信号量处于非信号状态,即非触发态;

使用WaitForSingleObject等待函数,可以获得处于信号状态的信号量。
一旦WaitForSingleObject函数得到此信号量,将会使信号量的计数值减一,此时你可以处理资源分配的操作了。

已经很详细了。
回复
tanuser1 2003-09-24
能说得详细些么?
回复
cnstar9988 2003-09-24
使用WaitForSingleObject等待函数,不会一直等下去,当信号量不等于0时就返回了,并且使信号量减一
回复
cnstar9988 2003-09-24
CreateSemaphore可以指定信号量计数和初始化计数。

ReleaseSemaphore(hSignal,1,NULL);
信号量表示加1。
回复
发帖
进程/线程/DLL
创建于2007-09-28

1.5w+

社区成员

VC/MFC 进程/线程/DLL
申请成为版主
帖子事件
创建了帖子
2003-09-24 08:03
社区公告
暂无公告