原文鏈接:http://m.shnenglu.com/wangjt/archive/2008/02/01/42362.html
Semaphore是旗語的意思,在Windows中,Semaphore對象用來控制對資源的并發(fā)訪問數(shù)。Semaphore對象具有一個計數(shù)值,當值大于0時,Semaphore被置信號,當計數(shù)值等于0時,Semaphore被清除信號。每次針對Semaphore的wait functions返回時,計數(shù)值被減1,調(diào)用ReleaseSemaphore可以將計數(shù)值增加 lReleaseCount 參數(shù)值指定的值。
CreateSemaphore函數(shù)用于創(chuàng)建一個Semaphore
HANDLE CreateSemaphore(
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
LONG lInitialCount,
LONG lMaximumCount,
LPCTSTR lpName
);
lpSemaphoreAttributes為安全屬性,
lInitialCount為Semaphore的初始值,
lMaximumCount為最大值,
lpName為Semaphore對象的名字,NULL表示創(chuàng)建匿名Semaphore
此外還可以調(diào)用OpenSemaphore來打開已經(jīng)創(chuàng)建的非匿名Semaphore
HANDLE OpenSemaphore(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
LPCTSTR lpName
);
調(diào)用ReleaseSemaphore增加Semaphore計算值
BOOL ReleaseSemaphore(
HANDLE hSemaphore,
LONG lReleaseCount,
LPLONG lpPreviousCount
);
lpReleaseCount參數(shù)表示要增加的數(shù)值,
lpPreviousCount參數(shù)用于返回之前的計算值,如果不需要可以設(shè)置為NULL
比如我們要控制到服務(wù)器的連接數(shù)不超過10個,可以創(chuàng)建一個Semaphore,初值為10,每當要連接到服務(wù)器時,使用WaitForSingleObject請求Semaphore,當成功返回后再嘗試連接到服務(wù)器,當連接失敗或連接使用完后釋放時,調(diào)用ReleaseSemaphore增加Semaphore計數(shù)值。