Line data Source code
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)
32 : # include "threads/posix/mutex-posix.hpp"
33 : #else
34 : # include "threads/none/mutex-none.hpp"
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>
42 : class AnyObjLocker
43 : {
44 : private:
45 : T& _mutex;
46 :
47 : public:
48 6179043 : AnyObjLocker(T& mutex): _mutex(mutex) { _mutex.lock(); }
49 6179025 : ~AnyObjLocker() { _mutex.unlock(); }
50 : };
51 :
52 : template<class T>
53 : class AnyClassLocker
54 : {
55 : public:
56 1 : AnyClassLocker() { T::lock(); }
57 1 : ~AnyClassLocker() { T::unlock(); }
58 : };
59 :
60 : typedef AnyObjLocker<Mutex> MutexLocker;
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 : */
|