Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Opmerking
De Microsoft Foundation Classes-bibliotheek (MFC) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.
Vertegenwoordigt een 'mutex': een synchronisatieobject waarmee één thread wederzijds exclusieve toegang tot een resource toestaat.
Syntaxis
class CMutex : public CSyncObject
Leden
Openbare constructors
| Naam | Description |
|---|---|
| CMutex::CMutex | Maakt een CMutex object. |
Opmerkingen
Mutexes zijn handig wanneer slechts één thread tegelijk kan worden toegestaan om gegevens of een andere beheerde resource te wijzigen. Het toevoegen van knooppunten aan een gekoppelde lijst is bijvoorbeeld een proces dat slechts door één thread tegelijk mag worden toegestaan. Door een CMutex object te gebruiken om de gekoppelde lijst te beheren, kan slechts één thread tegelijk toegang krijgen tot de lijst.
Als u een CMutex object wilt gebruiken, maakt u het CMutex object wanneer dit nodig is. Geef de naam op van de mutex waarop u wilt wachten en dat uw toepassing in eerste instantie eigenaar moet zijn van de mutex. U kunt vervolgens toegang krijgen tot de mutex wanneer de constructor terugkeert.
CSyncObject::Ontgrendelen wanneer u klaar bent met het openen van de beheerde resource.
Een alternatieve methode voor het gebruik CMutex van objecten is het toevoegen van een variabele van het type CMutex als gegevenslid aan de klasse die u wilt beheren. Roep tijdens de constructie van het gecontroleerde object de constructor aan van het CMutex gegevenslid dat aangeeft of de mutex in eerste instantie eigendom is, de naam van de mutex (als deze wordt gebruikt binnen procesgrenzen) en de gewenste beveiligingskenmerken.
Als u op deze manier toegang wilt krijgen tot resources die op deze manier worden beheerd door CMutex objecten, maakt u eerst een variabele van het type CSingleLock of typt u CMultiLock in de toegangslidfunctie van uw resource. Roep vervolgens de lidfunctie van het vergrendelingsobject Lock aan (bijvoorbeeld CSingleLock::Lock). Op dit moment krijgt uw thread toegang tot de resource, wacht u tot de resource is vrijgegeven en krijgt u toegang, of wacht u tot de resource is vrijgegeven en een time-out optreedt en geen toegang tot de resource krijgt. In elk geval is uw resource op een threadveilige manier geopend. Als u de resource wilt vrijgeven, gebruikt u de lidfunctie van het vergrendelingsobject Unlock (bijvoorbeeld CSingleLock::Unlock) of staat u toe dat het vergrendelingsobject buiten het bereik valt.
Zie het artikel Multithreading: De synchronisatieklassen gebruiken voor meer informatie over het gebruik CMutex van objecten.
Overnamehiërarchie
CMutex
Requirements
Koptekst: afxmt.h
CMutex::CMutex
Maakt een benoemd of niet-benoemd CMutex object.
CMutex(
BOOL bInitiallyOwn = FALSE,
LPCTSTR lpszName = NULL,
LPSECURITY_ATTRIBUTES lpsaAttribute = NULL);
Parameterwaarden
bInitiallyOwn
Hiermee geeft u op of de thread die het CMutex object maakt, in eerste instantie toegang heeft tot de resource die wordt beheerd door de mutex.
lpszName
Naam van het CMutex object. Als er een andere mutex met dezelfde naam bestaat, moet lpszName worden opgegeven als het object wordt gebruikt binnen procesgrenzen. Als NULL is, wordt de mutex niet benoemd. Als de naam overeenkomt met een bestaande mutex, bouwt de constructor een nieuw CMutex object dat verwijst naar de mutex van die naam. Als de naam overeenkomt met een bestaand synchronisatieobject dat geen mutex is, mislukt de constructie.
lpsaAttribute
Beveiligingskenmerken voor het mutex-object. Zie SECURITY_ATTRIBUTES in de Windows SDK voor een volledige beschrijving van deze structuur.
Opmerkingen
Als u een CMutex object wilt openen of vrijgeven, maakt u een CMultiLock - of CSingleLock-object en roept u de functies Lock en Unlock-leden aan. Als het object zelfstandig wordt gebruikt, roept u de CMutexUnlock lidfunctie aan om het los te laten.
Belangrijk
Nadat u het CMutex object hebt gemaakt, gebruikt u GetLastError om ervoor te zorgen dat de mutex nog niet bestaat. Als de mutex onverwacht bestond, kan dit erop wijzen dat een rogue proces squatting is en mogelijk van plan is om de mutex kwaadwillend te gebruiken. In dit geval is de aanbevolen beveiligingsbewuste procedure om de ingang te sluiten en door te gaan alsof er een fout is opgetreden bij het maken van het object.