Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*
Copyright (c) 1992 Microsoft Corporation
Module Name:
swmr.h
Abstract:
This module contains the Single writer-Multi reader access structures Also the lock-list-count structures.
Author:
Jameel Hyder (microsoft!jameelh)
Revision History: 25 Apr 1992 Initial Version
Notes: Tab stop: 4 --*/
#ifndef _SWMR_
#define _SWMR_
#if DBG
#define SWMR_SIGNATURE *(DWORD *)"SWMR"
#define VALID_SWMR(pSwmr) (((pSwmr) != NULL) && \
((pSwmr)->Signature == SWMR_SIGNATURE)) #else
#define VALID_SWMR(pSwmr) ((pSwmr) != NULL)
#endif
#define SWMR_SOMEONE_WAITING( _pSwmr ) ((_pSwmr)->swmr_cExclWaiting || \
(_pSwmr)->swmr_cSharedWaiting) typedef struct _SingleWriterMultiReader { #if DBG
DWORD Signature; #endif
BYTE swmr_cOwnedExclusive; // # of times a single thread has owned it exclusively
BYTE swmr_cExclWaiting; // Number of writers waiting
BYTE swmr_cSharedOwners; // Count of threads owning shared access
BYTE swmr_cSharedWaiting; // Count of threads waiting for shared access
PETHREAD swmr_ExclusiveOwner; // Owning thread for exclusive access
KSEMAPHORE swmr_ExclSem; // semaphore for Exclusive owners
KSEMAPHORE swmr_SharedSem; // Semaphore for Shared owners
} SWMR, *PSWMR;
extern VOID FASTCALL AfpSwmrInitSwmr( IN OUT PSWMR pSwmr );
extern VOID FASTCALL AfpSwmrAcquireShared( IN PSWMR pSwmr );
VOID FASTCALL AfpSwmrAcquireExclusive( IN PSWMR pSwmr );
extern VOID FASTCALL AfpSwmrRelease( IN PSWMR pSwmr );
extern BOOLEAN FASTCALL AfpSwmrUpgradeToExclusive( IN PSWMR pSwmr );
extern VOID FASTCALL AfpSwmrDowngradeToShared( IN PSWMR pSwmr );
#define AfpSwmrLockedShared(pSwmr) \
(((pSwmr)->swmr_cSharedOwners != 0) && \ ((pSwmr)->swmr_cOwnedExclusive == 0)) #define AfpSwmrLockedExclusive(pSwmr) \
(((pSwmr)->swmr_cOwnedExclusive != 0) && \ ((pSwmr)->swmr_ExclusiveOwner == PsGetCurrentThread()))
#endif // _SWMR_
|