C++互斥器:Semaphores

类似于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:原来(那一时刻)的现值

 

posted @ 2014-03-19 17:39  大卫酱_David  阅读(417)  评论(0编辑  收藏  举报