1999-08-16 21:50:52 +00:00
|
|
|
/*
|
2001-03-21 20:44:20 +00:00
|
|
|
******************************************************************************
|
1999-12-13 22:28:37 +00:00
|
|
|
*
|
2001-03-21 20:44:20 +00:00
|
|
|
* Copyright (C) 1997-2001, International Business Machines
|
1999-12-13 22:28:37 +00:00
|
|
|
* Corporation and others. All Rights Reserved.
|
|
|
|
*
|
2001-03-21 20:44:20 +00:00
|
|
|
******************************************************************************
|
1999-08-16 21:50:52 +00:00
|
|
|
*/
|
2001-03-21 20:44:20 +00:00
|
|
|
//----------------------------------------------------------------------------
|
1999-08-16 21:50:52 +00:00
|
|
|
// File: mutex.h
|
|
|
|
//
|
|
|
|
// Lightweight C++ wrapper for umtx_ C mutex functions
|
|
|
|
//
|
|
|
|
// Author: Alan Liu 1/31/97
|
|
|
|
// History:
|
|
|
|
// 06/04/97 helena Updated setImplementation as per feedback from 5/21 drop.
|
|
|
|
// 04/07/1999 srl refocused as a thin wrapper
|
|
|
|
//
|
2001-03-21 20:44:20 +00:00
|
|
|
//----------------------------------------------------------------------------
|
1999-08-16 21:50:52 +00:00
|
|
|
#ifndef MUTEX_H
|
|
|
|
#define MUTEX_H
|
|
|
|
|
2002-06-27 01:19:20 +00:00
|
|
|
#include "unicode/utypes.h"
|
|
|
|
#include "unicode/uobject.h"
|
1999-08-16 21:50:52 +00:00
|
|
|
#include "umutex.h"
|
|
|
|
|
2001-10-08 23:26:58 +00:00
|
|
|
U_NAMESPACE_BEGIN
|
|
|
|
|
2001-03-21 20:44:20 +00:00
|
|
|
//----------------------------------------------------------------------------
|
1999-08-16 21:50:52 +00:00
|
|
|
// Code within this library which accesses protected data
|
|
|
|
// should instantiate a Mutex object while doing so. You should make your own
|
|
|
|
// private mutex where possible.
|
|
|
|
|
|
|
|
// For example:
|
|
|
|
//
|
|
|
|
// UMTX myMutex;
|
|
|
|
//
|
|
|
|
// int InitializeMyMutex()
|
|
|
|
// {
|
|
|
|
// umtx_init( &myMutex );
|
|
|
|
// return 0;
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// static int initializeMyMutex = InitializeMyMutex();
|
|
|
|
//
|
|
|
|
// void Function(int arg1, int arg2)
|
|
|
|
// {
|
|
|
|
// static Object* foo; // Shared read-write object
|
|
|
|
// Mutex mutex(&myMutex); // or no args for the global lock
|
|
|
|
// foo->Method();
|
|
|
|
// // When 'mutex' goes out of scope and gets destroyed here, the lock is released
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// Note: Do NOT use the form 'Mutex mutex();' as that merely forward-declares a function
|
|
|
|
// returning a Mutex. This is a common mistake which silently slips through the
|
|
|
|
// compiler!!
|
|
|
|
//
|
|
|
|
|
2002-10-04 17:27:53 +00:00
|
|
|
class U_COMMON_API Mutex : public UMemory {
|
1999-08-16 21:50:52 +00:00
|
|
|
public:
|
|
|
|
inline Mutex(UMTX *mutex = NULL);
|
|
|
|
inline ~Mutex();
|
|
|
|
|
|
|
|
private:
|
|
|
|
UMTX *fMutex;
|
2002-06-29 00:04:16 +00:00
|
|
|
|
2002-10-04 17:27:53 +00:00
|
|
|
Mutex(const Mutex &other); // forbid copying of this class
|
|
|
|
Mutex &operator=(const Mutex &other); // forbid copying of this class
|
1999-08-16 21:50:52 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
inline Mutex::Mutex(UMTX *mutex)
|
|
|
|
: fMutex(mutex)
|
|
|
|
{
|
|
|
|
umtx_lock(fMutex);
|
|
|
|
}
|
|
|
|
|
|
|
|
inline Mutex::~Mutex()
|
|
|
|
{
|
|
|
|
umtx_unlock(fMutex);
|
|
|
|
}
|
|
|
|
|
2001-10-08 23:26:58 +00:00
|
|
|
U_NAMESPACE_END
|
|
|
|
|
1999-08-16 21:50:52 +00:00
|
|
|
#endif //_MUTEX_
|
|
|
|
//eof
|