]> git.saurik.com Git - apple/icu.git/blob - icuSources/common/mutex.h
ICU-531.30.tar.gz
[apple/icu.git] / icuSources / common / mutex.h
1 /*
2 ******************************************************************************
3 *
4 * Copyright (C) 1997-2013, 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 // UMutex myMutex;
37 //
38 // void Function(int arg1, int arg2)
39 // {
40 // static Object* foo; // Shared read-write object
41 // Mutex mutex(&myMutex); // or no args for the global lock
42 // foo->Method();
43 // // When 'mutex' goes out of scope and gets destroyed here, the lock is released
44 // }
45 //
46 // Note: Do NOT use the form 'Mutex mutex();' as that merely forward-declares a function
47 // returning a Mutex. This is a common mistake which silently slips through the
48 // compiler!!
49 //
50
51 class U_COMMON_API Mutex : public UMemory {
52 public:
53 inline Mutex(UMutex *mutex = NULL);
54 inline ~Mutex();
55
56 private:
57 UMutex *fMutex;
58
59 Mutex(const Mutex &other); // forbid copying of this class
60 Mutex &operator=(const Mutex &other); // forbid copying of this class
61 };
62
63 inline Mutex::Mutex(UMutex *mutex)
64 : fMutex(mutex)
65 {
66 umtx_lock(fMutex);
67 }
68
69 inline Mutex::~Mutex()
70 {
71 umtx_unlock(fMutex);
72 }
73
74 U_NAMESPACE_END
75
76 #endif //_MUTEX_
77 //eof