《Win32多线程程序设计》(5)---信号量(Semaphores)
2014-02-11 22:03
295 查看
Win32 中的一个sem aphore 可以被锁住最多n 次,其中n 是sem aphore 被产生时指定的。n常常被设计用来代表“可以锁住一份资源”的线程个数,不过并非单独一个线程就不能够拥有所有的锁定。
LPSECURITY_ATTRIBUTES lpAttributes,
LONG lInitialCount,
LONG lMaximumCount,
LPCTSTR lpName
);
参数
lpAttributes 安全属性。如果是NULL 就表示要使用默认属性。Windows 95 忽略这一参数。
lInitialCountsem aphore 的初值。必须大于或等于0,并且小于或等于lMaxim umCount。
lMaximumCountSem aphore 的最大值。这也就是在同一时间内能够锁住sem aphore 之线程的最多个数。
lpNameSem aphore 的名称(一个字符串)。任何线程(或进程)都可以根据这一名称引用到这个
semaphore。这个值可以是NULL,意思是产生一个没有名字的sem aphore。
返回值
如果成功就传回一个handle ,否则传回NULL。不论哪一种情况,
GetLastError() 都会传回一个合理的结果。如果指定的sem aphore 名称已经存
在,则该函数还是成功的,GetLastError() 会传回ERRO R_ALREADY_EXISTS。
文字版电子书-----请点击这里
1.产生信号量(Semaphore)
HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES lpAttributes,
LONG lInitialCount,
LONG lMaximumCount,
LPCTSTR lpName
);
参数
lpAttributes 安全属性。如果是NULL 就表示要使用默认属性。Windows 95 忽略这一参数。
lInitialCountsem aphore 的初值。必须大于或等于0,并且小于或等于lMaxim umCount。
lMaximumCountSem aphore 的最大值。这也就是在同一时间内能够锁住sem aphore 之线程的最多个数。
lpNameSem aphore 的名称(一个字符串)。任何线程(或进程)都可以根据这一名称引用到这个
semaphore。这个值可以是NULL,意思是产生一个没有名字的sem aphore。
返回值
如果成功就传回一个handle ,否则传回NULL。不论哪一种情况,
GetLastError() 都会传回一个合理的结果。如果指定的sem aphore 名称已经存
在,则该函数还是成功的,GetLastError() 会传回ERRO R_ALREADY_EXISTS。
2.获得锁定
每当一个锁定动作成功,semaphore 的现值就会减1。你可以使用任何一种Wait...() 函数(例如WaitForSingleO bject())要求锁定一个sem aphore。因此,如果sem aphore 的现值不为0,Wait...() 函数会立刻返回。这和mu tex 很像,如果没有任何线程拥有mu tex,Wait...() 会立刻返回。3.解除锁定(Releasing Locks)
为了解除锁定,你必须调用ReleaseSem aphore()。这个函数将sem aphore的现值增加一个定额,通常是1,并传回sem aphore 的前一个现值。文字版电子书-----请点击这里
相关文章推荐
- 《Win32多线程程序设计》学习笔记 第4章 同步控制之 信号量(Semaphores)
- 浅析线程间通信三:Barriers、信号量(semaphores)以及各种同步方法比较
- window下线程同步之(Semaphores(信号量))
- Java并发学习之十六——线程同步工具之信号量(Semaphores)
- CMSIS-RTOS 信号量Semaphores
- 《The Little Book Of Semaphores》,将信号量的使用玩到极致,强烈推荐本老外的好书
- 临界区(Critical Section),互斥量(Mutex),信号量(Semaphores),事件(Event) 的区别
- Win32多线程之信号量(Semaphores)
- 信号量的PV操作
- java 信号量
- 信号量、互斥体和自旋锁
- Linux下信号量的使用与处理
- nginx信号量
- 用信号量解决进程的同步与互斥探讨
- 关于吞吐量、延迟、信号量和互斥锁的精彩比喻
- Linux学习笔记(06-11)POSIX信号量
- Linux_4.7_信号量同步编程
- uc/os-ii互斥型信号量
- 互斥量和信号量的区别
- c++ 信号量