1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru****************************************************************************** 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 459d709d503bab6e2b61931737e662dd293b40578ccornelius* Copyright (C) 1997-2013, International Business Machines 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru****************************************************************************** 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------------- 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// File: mutex.h 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Lightweight C++ wrapper for umtx_ C mutex functions 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Author: Alan Liu 1/31/97 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// History: 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 06/04/97 helena Updated setImplementation as per feedback from 5/21 drop. 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 04/07/1999 srl refocused as a thin wrapper 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------------- 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef MUTEX_H 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define MUTEX_H 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uobject.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "umutex.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_BEGIN 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//---------------------------------------------------------------------------- 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Code within that accesses shared static or global data should 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// should instantiate a Mutex object while doing so. You should make your own 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// private mutex where possible. 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// For example: 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 3654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius// UMutex myMutex; 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// void Function(int arg1, int arg2) 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// { 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// static Object* foo; // Shared read-write object 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Mutex mutex(&myMutex); // or no args for the global lock 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// foo->Method(); 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// // When 'mutex' goes out of scope and gets destroyed here, the lock is released 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Note: Do NOT use the form 'Mutex mutex();' as that merely forward-declares a function 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// returning a Mutex. This is a common mistake which silently slips through the 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// compiler!! 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass U_COMMON_API Mutex : public UMemory { 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 5354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius inline Mutex(UMutex *mutex = NULL); 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline ~Mutex(); 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprivate: 5754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UMutex *fMutex; 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Mutex(const Mutex &other); // forbid copying of this class 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Mutex &operator=(const Mutex &other); // forbid copying of this class 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 6354dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusinline Mutex::Mutex(UMutex *mutex) 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : fMutex(mutex) 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umtx_lock(fMutex); 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline Mutex::~Mutex() 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru umtx_unlock(fMutex); 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_END 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif //_MUTEX_ 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//eof 78