Leaked source code of windows server 2003
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) Microsoft Corporation
//
// SYNOPSIS
//
// Declares the class Perimeter
//
///////////////////////////////////////////////////////////////////////////////
#ifndef PERIMETER_H
#define PERIMETER_H
#pragma once
///////////////////////////////////////////////////////////////////////////////
//
// CLASS
//
// Perimeter
//
// DESCRIPTION
//
// This class implements a Perimeter synchronization object. Threads
// may request either exclusive or shared access to the protected area.
//
///////////////////////////////////////////////////////////////////////////////
class Perimeter { public: Perimeter() throw (); ~Perimeter() throw ();
HRESULT FinalConstruct() throw ();
void Lock() throw (); void LockExclusive() throw (); void Unlock() throw ();
protected: LONG sharing; // Number of threads sharing the perimiter.
LONG waiting; // Number of threads waiting for shared access.
PLONG count; // Pointer to either sharing or waiting depending
// on the current state of the perimiter.
bool exclusiveInitialized; CRITICAL_SECTION exclusive; // Synchronizes exclusive access.
HANDLE sharedOK; // Wakes up threads waiting for shared.
HANDLE exclusiveOK; // Wakes up threads waiting for exclusive.
private: // Not implemented.
Perimeter(const Perimeter&) throw (); Perimeter& operator=(const Perimeter&) throw (); };
#endif // PERIMETER_H
|