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