All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Mutex.h
Go to the documentation of this file.
1 /*
2  * Mutex.h
3  *
4  * This file is part of the HausmiSEP project
5  *
6  * Copyright (C) 2012, 2013 Marco Alvarado (malvcr@gmail.com)
7  *
8  * This program is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU 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, see <http://www.gnu.org/licenses/>.
20  */
21 
22 #ifndef MUTEX_H_
23 #define MUTEX_H_
24 
25 #include <HSEP/HSEP.h>
26 #include <HSEP/POSIX_Mutex.h>
27 
28 #include <functional>
29 
30 using namespace std;
31 namespace HSEP {
32 
40  Mutex* aMutex;
41  public:
42  ExclusiveScope(Mutex* pMutex) : aMutex(pMutex) {
43  aMutex->acquire();
44  }
46  aMutex->release();
47  }
48  }; // ExclusiveScope
56  typedef function<void ()> ScopeWorker;
57 
64  class Scope {
65  Mutex aMutex;
66  public:
67  void operator()(ScopeWorker pWorker) {
68  ExclusiveScope vScope(&aMutex);
69  pWorker();
70  }
71  }; // Scope class
72 
76  class SharedMutex : public Mutex {
77  public:
78  SharedMutex() : Mutex(true) {}
79  }; // SharedMutex class
80 
81 } // HSEP namespace
82 
83 #endif /* MUTEX_H_ */