Megosztás a következőn keresztül:


CSemaphore osztály

Az osztály CSemaphore objektuma egy "szemaphore". A szemaphore egy szinkronizálási objektum, amely szabályozza a megosztott erőforrásokhoz való hozzáférést, és megakadályozza a versenyfeltételeket.

Szemantika

class CSemaphore : public CSyncObject

Tagok

Nyilvános konstruktorok

Név Leírás
CSemaphore::CSemaphore Egy CSemaphore objektumot hoz létre.

Megjegyzések

A szemaphorok olyan megosztott erőforráshoz való hozzáférés szabályozásában hasznosak, amelyek csak korlátozott számú felhasználót támogatnak. Az objektum aktuális száma az CSemaphore engedélyezett felhasználók száma. Amikor a szám eléri a nullát, az objektum által CSemaphore vezérelt erőforrás használatára tett összes kísérlet be lesz szúrva egy rendszersorba, és megvárja, amíg időtúllépés történik, vagy a szám 0 fölé emelkedik. Az objektum létrehozásakor meg van adva azoknak a felhasználóknak a maximális száma, akik egyszerre férhetnek hozzá az CSemaphore ellenőrzött erőforráshoz.

Objektum használatához CSemaphore szükség esetén hozza létre az CSemaphore objektumot. Adja meg annak a szemapónak a nevét, amelynél várni szeretne, és hogy az alkalmazásnak kezdetben a tulajdonosa legyen. Ezután a konstruktor visszatérésekor elérheti a szemapórát. Hívás CSyncObject::Unlock , ha végzett az ellenőrzött erőforrás elérésének befejeztével.

Egy másik módszer az objektumok használatára CSemaphore , ha adattagként egy típusváltozót CSemaphore ad hozzá a szabályozni kívánt osztályhoz. Az ellenőrzött objektum létrehozása során hívja meg az adattag konstruktorát CSemaphore , amely megadja a kezdeti hozzáférés számát, a hozzáférés maximális számát, a szemaphore nevét (ha a folyamathatárokon keresztül használják) és a kívánt biztonsági attribútumokat.

Az objektumok által CSemaphore szabályozott erőforrások ilyen módon való eléréséhez először hozzon létre egy CSingleLock típusú vagy CMultiLock típusú változót az erőforrás hozzáférési tagfüggvényében. Ezután hívja meg a zárolási objektum tagfüggvényét Lock (például CSingleLock::Lock). Ezen a ponton a szál vagy hozzáférést kap az erőforráshoz, megvárja az erőforrás kiadását és a hozzáférést, vagy megvárja az erőforrás kiadását és időtúllépését, és nem fér hozzá az erőforráshoz. Az erőforrás minden esetben szálbiztos módon érhető el. Az erőforrás kiadásához használja a zárolási objektum tagfüggvényét Unlock (például CSingleLock::Unlock), vagy engedélyezze, hogy a zárolási objektum kiesjen a hatókörből.

Azt is megteheti, hogy önállóan hoz létre egy CSemaphore objektumot, és explicit módon éri el, mielőtt megpróbálkozásba irányítja az erőforrást. Ez a módszer, bár egyértelműbb a forráskódot olvasó személy számára, hajlamosabb a hibára.

Az objektumok használatáról CSemaphore további információt a Többszálúság: A szinkronizálási osztályok használata című cikkben talál.

Öröklési hierarchia

CObject

CSyncObject

CSemaphore

Követelmények

Fejléc: afxmt.h

CSemafor::CSemaphore

Névvel ellátott vagy névtelen CSemaphore objektumot hoz létre.

CSemaphore(
    LONG lInitialCount = 1,
    LONG lMaxCount = 1,
    LPCTSTR pstrName = NULL,
    LPSECURITY_ATTRIBUTES lpsaAttributes = NULL);

Paraméterek

lInitialCount
A szemapó kezdeti használati száma. 0-nál nagyobbnak vagy egyenlőnek kell lennie, és kisebbnek vagy egyenlőnek kell lennie, mint az lMaxCount.

lMaxCount
A szemaphore maximális használati száma. 0-nál nagyobbnak kell lennie.

pstrName
A szemaphore neve. Akkor kell megadni, ha a szemaphore a folyamathatárokon keresztül érhető el. Ha NULL, az objektum névtelen lesz. Ha a név egyezik egy meglévő szemapórával, a konstruktor létrehoz egy új CSemaphore objektumot, amely az adott név szemaforjára hivatkozik. Ha a név egyezik egy meglévő szinkronizálási objektummal, amely nem szemafor, a konstrukció meghiúsul.

lpsaAttributes
A szemaphore objektum biztonsági attribútumai. A struktúra teljes leírását a Windows SDK SECURITY_ATTRIBUTES című témakörben talál.

Megjegyzések

Objektum eléréséhez vagy felszabadításához CSemaphore hozzon létre egy vagy CMultiLock több CSingleLock objektumot, és hívja meg annak és Lock tagfüggvényeit.

Fontos

Az CSemaphore objektum létrehozása után győződjön meg arról, GetLastError hogy a mutex még nem létezik. Ha a mutex váratlanul létezett, az azt jelezheti, hogy egy rogue folyamat guggolódik, és rosszindulatúan kívánja használni a mutexet. Ebben az esetben az ajánlott biztonságtudatos eljárás a fogópont bezárása és folytatása, mintha hiba történt volna az objektum létrehozásakor.

Lásd még

CSyncObject osztály
hierarchiadiagram