зеркало из https://github.com/mozilla/gecko-dev.git
86 строки
3.1 KiB
C++
86 строки
3.1 KiB
C++
/*
|
|
*****************************************************************************************
|
|
* *
|
|
* COPYRIGHT: *
|
|
* (C) Copyright Taligent, Inc., 1997 *
|
|
* (C) Copyright International Business Machines Corporation, 1997 *
|
|
* Licensed Material - Program-Property of IBM - All Rights Reserved. *
|
|
* US Government Users Restricted Rights - Use, duplication, or disclosure *
|
|
* restricted by GSA ADP Schedule Contract with IBM Corp. *
|
|
* *
|
|
*****************************************************************************************
|
|
*/
|
|
//------------------------------------------------------------------------------
|
|
// File: mutex.h
|
|
//
|
|
// Simple mutex class which allows platform-independent thread safety. The
|
|
// burden is on the library caller to provide the actual locking implementation,
|
|
// if they need thread-safety. Clients who don't care don't need to do anything.
|
|
//
|
|
// Author: Alan Liu 1/31/97
|
|
// History:
|
|
// 06/04/97 helena Updated setImplementation as per feedback from 5/21 drop.
|
|
//
|
|
//------------------------------------------------------------------------------
|
|
#ifndef _NLSMUTEX_
|
|
#define _NLSMUTEX_
|
|
#include "ptypes.h"
|
|
|
|
#ifndef _MUTEXIMP
|
|
#include "muteximp.h"
|
|
#endif
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Code within this library which accesses protected data
|
|
// should instantiate a Mutex object while doing so. Notice that there is only
|
|
// one coarse-grained lock which applies to this entire library, so keep locking
|
|
// short and sweet.
|
|
|
|
// For example:
|
|
|
|
// void Function(int arg1, int arg2)
|
|
// {
|
|
// static Object* foo; // Shared read-write object
|
|
// Mutex mutex();
|
|
// foo->Method();
|
|
// // When 'mutex' goes out of scope and gets destroyed here, the lock is released
|
|
// }
|
|
|
|
#ifdef NLS_MAC
|
|
#pragma export on
|
|
#endif
|
|
|
|
class NLSCNVAPI_PUBLIC_CLASS NLSMutex
|
|
{
|
|
public:
|
|
NLSMutex();
|
|
~NLSMutex();
|
|
|
|
// Clients must call this method in order to establish the mutex
|
|
// implementation on the local platform. Note that this call itself
|
|
// is not thread-safe. The caller is responsible for making this call
|
|
// in a thread-safe way. Clients who don't care about thread safety
|
|
// don't have to call this method.
|
|
static void SetImplementation(const MutexImplementation* aliased_implementation);
|
|
|
|
//
|
|
// Clients can call this method to release the mutex implementation
|
|
// on the local platform. This call is not thread-safe, and the
|
|
// one called, no other operation will be thread safe. This should
|
|
// only be called as a part of the application termination routine,
|
|
// and is provided primarily to help clients using memory analysis
|
|
// software obtain a clean report.
|
|
static void ReleaseImplementation(void);
|
|
|
|
private:
|
|
static MutexImplementation* fgImplementation;
|
|
};
|
|
|
|
#ifdef NLS_MAC
|
|
#pragma export off
|
|
#endif
|
|
|
|
|
|
#endif //_MUTEX_
|
|
//eof
|