CACAO
mutex.hpp
Go to the documentation of this file.
1 /* src/threads/mutex.hpp - machine independent mutual exclusion functions
2 
3  Copyright (C) 1996-2013
4  CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
5 
6  This file is part of CACAO.
7 
8  This program is free software; you can redistribute it and/or
9  modify it under the terms of the GNU General Public License as
10  published by the Free Software Foundation; either version 2, or (at
11  your option) any later version.
12 
13  This program is distributed in the hope that it will be useful, but
14  WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with this program; if not, write to the Free Software
20  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21  02110-1301, USA.
22 
23 */
24 
25 
26 #ifndef _MUTEX_HPP
27 #define _MUTEX_HPP
28 
29 #include "config.h"
30 
31 #if defined(ENABLE_THREADS)
33 #else
35 #endif
36 
37 /**
38  * Helper class used to implicitly acquire and release a mutex
39  * within a method scope.
40  */
41 template<class T>
43 {
44 private:
45  T& _mutex;
46 
47 public:
48  AnyObjLocker(T& mutex): _mutex(mutex) { _mutex.lock(); }
49  ~AnyObjLocker() { _mutex.unlock(); }
50 };
51 
52 template<class T>
54 {
55 public:
57  ~AnyClassLocker() { T::unlock(); }
58 };
59 
61 
62 #endif /* _MUTEX_HPP */
63 
64 
65 /*
66  * These are local overrides for various environment variables in Emacs.
67  * Please do not remove this and leave it at the end of the file, where
68  * Emacs will automagically detect them.
69  * ---------------------------------------------------------------------
70  * Local variables:
71  * mode: c++
72  * indent-tabs-mode: t
73  * c-basic-offset: 4
74  * tab-width: 4
75  * End:
76  * vim:noexpandtab:sw=4:ts=4:
77  */
T & _mutex
Definition: mutex.hpp:45
static Mutex lock
Definition: atomic.cpp:34
~AnyObjLocker()
Definition: mutex.hpp:49
static Mutex mutex
Definition: show.cpp:73
Helper class used to implicitly acquire and release a mutex within a method scope.
Definition: mutex.hpp:42
~AnyClassLocker()
Definition: mutex.hpp:57
AnyClassLocker()
Definition: mutex.hpp:56
AnyObjLocker(T &mutex)
Definition: mutex.hpp:48
AnyObjLocker< Mutex > MutexLocker
Definition: mutex.hpp:60