类似于Mutex,但信号量Semaphores不仅仅是锁和解锁那么简单,更高级的是,可以被锁住最多n次。
其中这个n是信号量被产生时指定的n。该值常常被用来代表“可以锁定住一份资源”的线程个数。
可以把Mutex比作厕所,当一个人进去后,其他人只能等待;
可以把信号量看作是多个Mutex(多个厕所),反正就3个厕所(一个入口,3个坑),无论等待的有多少人,反正想进去必须等到里面出来一个(如果里面满了);
在许多系统中,常常使用的是信号量而非Mutex,因为它不一定存在。但是在win32中,我们更多的使用Mutex而不是信号量,Mutex方便嘛,当然用信号量也是可以的。
常用的信号量接口:
1. 产生信号量:
1 HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES lpAttributes, LONG lInitialCount, LONG lMaximumCount, LPCTSTR lpName) 2 3 --lInitialCount:初始值 4 --lMaximunCount:最大值
这些值就表示目前可用的资源数,如果为1则表示还有一个锁定工作可以成功,如果现值为5则表示还有5个资源可用。
每当一个锁定动作成功,则现值就会减一,直到为0时,其他锁定线程只能wait…
2. 释放信号量
1 BOOL ReleaseSemaphore(HANDLE hSemaphore, LONG lReleaseCount, LPLONG lpPreviousCount); 2 3 --lReleaseCount:释放的数量 4 --lpPreviousCount:原来(那一时刻)的现值