Lock to manage interruptible threads added.
[scilab.git] / scilab / modules / ast / includes / system_env / threadmanagement.hxx
1 /*
2 *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 *  Copyright (C) 2015 - Scilab-Enterprises - Cedric Delamarre
4 *
5 *  This file must be used under the terms of the CeCILL.
6 *  This source file is licensed as described in the file COPYING, which
7 *  you should have received as part of this distribution.  The terms
8 *  are also available at
9 *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10 *
11 */
12
13 #ifndef __THREADMANAGEMENT_HXX__
14 #define __THREADMANAGEMENT_HXX__
15
16 extern "C"
17 {
18 #include "Thread_Wrapper.h"
19 #include "dynamiclibrary.h"
20 #include "dynlib_ast.h"
21 }
22
23 class EXTERN_AST ThreadManagement
24 {
25 private :
26     static __threadLock m_RunnerLock;
27     static __threadLock m_StartLock;
28     static __threadLock m_ParseLock;
29     static __threadLock m_StoreCommandLock;
30     static __threadLock m_AstLock;
31
32     static __threadSignal m_ConsoleExecDone;
33     static __threadSignalLock m_ConsoleExecDoneLock;
34
35     static __threadSignal m_AwakeRunner;
36     static __threadSignalLock m_AwakeRunnerLock;
37
38     static __threadSignal m_AstPending;
39     static __threadSignalLock m_AstPendingLock;
40
41     static __threadSignal m_StartPending;
42     static __threadSignalLock m_StartPendingLock;
43
44     static __threadSignal m_CommandStored;
45     static __threadSignalLock m_CommandStoredLock;
46
47     // used to avoid "Spurious Wakeups"
48     static bool m_AstPendingWasSignalled;
49     static bool m_ConsoleExecDoneWasSignalled;
50     static bool m_AwakeRunnerWasSignalled;
51     static bool m_StartPendingWasSignalled;
52     static bool m_CommandStoredWasSignalled;
53
54 public :
55     static void initialize(void);
56
57     static void LockStart(void);
58     static void UnlockStart(void);
59     static void LockParser(void);
60     static void UnlockParser(void);
61     static void LockStoreCommand(void);
62     static void UnlockStoreCommand(void);
63     static void LockRunner(void);
64     static void UnlockRunner(void);
65     static void LockAst(void);
66     static void UnlockAst(void);
67
68     static void SendAstPendingSignal(void);
69     static void WaitForAstPendingSignal(void);
70     static void SendConsoleExecDoneSignal(void);
71     static void WaitForConsoleExecDoneSignal(void);
72     static void SendAwakeRunnerSignal(void);
73     static void WaitForAwakeRunnerSignal(void);
74     static void SendStartPendingSignal(void);
75     static void WaitForStartPendingSignal(void);
76     static void SendCommandStoredSignal(void);
77     static void WaitForCommandStoredSignal(void);
78
79 };
80
81 #endif /* !__THREADMANAGEMENT_HXX__ */