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