MIRA
ScopedGIL.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) by
3  * MetraLabs GmbH (MLAB), GERMANY
4  * and
5  * Neuroinformatics and Cognitive Robotics Labs (NICR) at TU Ilmenau, GERMANY
6  * All rights reserved.
7  *
8  * Redistribution and modification of this code is strictly prohibited.
9  *
10  * IN NO EVENT SHALL "MLAB" OR "NICR" BE LIABLE TO ANY PARTY FOR DIRECT,
11  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF
12  * THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF "MLAB" OR
13  * "NICR" HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
14  *
15  * "MLAB" AND "NICR" SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING,
16  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
17  * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
18  * ON AN "AS IS" BASIS, AND "MLAB" AND "NICR" HAVE NO OBLIGATION TO
19  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR MODIFICATIONS.
20  */
21 
22 /*
23  * @file ScopedGIL.h
24  * Scoped GIL lock classes.
25  *
26  * @author Christian Vollmer, Tim Langner
27  * @date: 2011/03/02
28  */
29 
30 #ifndef _MIRA_TOOLBOXES_PYTHON_SCOPEDGIL_H_
31 #define _MIRA_TOOLBOXES_PYTHON_SCOPEDGIL_H_
32 
33 #include <Python.h>
34 
35 namespace mira { namespace python {
36 
38 
55 {
56 public:
57 
59  {
60  mState = PyGILState_Ensure();
61  mLocked = true;
62  }
63 
65  {
66  unlock();
67  }
68 
69  void unlock()
70  {
71  if (mLocked)
72  {
73  PyGILState_Release(mState);
74  mLocked = false;
75  }
76  }
77 
78 private:
79  PyGILState_STATE mState;
80  bool mLocked;
81 };
82 
100 {
101 public:
103  {
104  mState = PyEval_SaveThread();
105  mLocked = true;
106  }
108  {
109  unlock();
110  }
111 
112  void unlock()
113  {
114  if (mLocked)
115  {
116  PyEval_RestoreThread(mState);
117  mLocked = false;
118  }
119  }
120 
121 private:
122  PyThreadState* mState;
123  bool mLocked;
124 };
125 
127 
128 }}
129 
130 #endif /* _MIRA_TOOLBOXES_PYTHON_SCOPEDGIL_H_ */
131 
~ScopedGILLock()
Definition: ScopedGIL.h:64
ScopedGILThreadLock()
Definition: ScopedGIL.h:102
void unlock()
Definition: ScopedGIL.h:112
~ScopedGILThreadLock()
Definition: ScopedGIL.h:107
void unlock()
Definition: ScopedGIL.h:69
A scoped global interpreter (GIL) lock.
Definition: ScopedGIL.h:54
ScopedGILLock()
Definition: ScopedGIL.h:58
A scoped global interpreter (GIL) lock.
Definition: ScopedGIL.h:99