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