summaryrefslogtreecommitdiffstats
path: root/lldb/tools/lldb-mi/MIUtilThreadBaseStd.h
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/tools/lldb-mi/MIUtilThreadBaseStd.h')
-rw-r--r--lldb/tools/lldb-mi/MIUtilThreadBaseStd.h223
1 files changed, 104 insertions, 119 deletions
diff --git a/lldb/tools/lldb-mi/MIUtilThreadBaseStd.h b/lldb/tools/lldb-mi/MIUtilThreadBaseStd.h
index 738f295b657..cfff7d459b4 100644
--- a/lldb/tools/lldb-mi/MIUtilThreadBaseStd.h
+++ b/lldb/tools/lldb-mi/MIUtilThreadBaseStd.h
@@ -13,147 +13,132 @@
#ifdef _MSC_VER
#include <eh.h>
#endif // _MSC_VER
-#include <thread>
#include <mutex>
+#include <thread>
// In-house headers:
#include "MIDataTypes.h"
#include "MIUtilString.h"
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI common code utility class. Handle thread mutual exclusion.
// Embed Mutexes in your Active Object and then use them through Locks.
//--
-class CMIUtilThreadMutex
-{
- // Methods:
- public:
- /* ctor */ CMIUtilThreadMutex(){}
- //
- void
- Lock(); // Wait until mutex can be obtained
- void
- Unlock(); // Release the mutex
- bool
- TryLock(); // Gain the lock if available
-
- // Overrideable:
- public:
- // From CMICmnBase
- /* dtor */ virtual ~CMIUtilThreadMutex(){}
-
- // Attributes:
- private:
- std::recursive_mutex m_mutex;
+class CMIUtilThreadMutex {
+ // Methods:
+public:
+ /* ctor */ CMIUtilThreadMutex() {}
+ //
+ void Lock(); // Wait until mutex can be obtained
+ void Unlock(); // Release the mutex
+ bool TryLock(); // Gain the lock if available
+
+ // Overrideable:
+public:
+ // From CMICmnBase
+ /* dtor */ virtual ~CMIUtilThreadMutex() {}
+
+ // Attributes:
+private:
+ std::recursive_mutex m_mutex;
};
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI common code utility class. Thread object.
//--
-class CMIUtilThread
-{
- // Typedef:
- public:
- typedef MIuint (*FnThreadProc)(void *vpThisClass);
-
- // Methods:
- public:
- /* ctor */ CMIUtilThread();
- //
- bool
- Start(FnThreadProc vpFn, void *vpArg); // Start execution of this thread
- bool
- Join(); // Wait for this thread to stop
- bool
- IsActive(); // Returns true if this thread is running
- void
- Finish(); // Finish this thread
-
- // Overrideable:
- public:
- /* dtor */ virtual ~CMIUtilThread();
-
- // Methods:
- private:
- CMIUtilThreadMutex m_mutex;
- std::thread *m_pThread;
- bool m_bIsActive;
+class CMIUtilThread {
+ // Typedef:
+public:
+ typedef MIuint (*FnThreadProc)(void *vpThisClass);
+
+ // Methods:
+public:
+ /* ctor */ CMIUtilThread();
+ //
+ bool Start(FnThreadProc vpFn, void *vpArg); // Start execution of this thread
+ bool Join(); // Wait for this thread to stop
+ bool IsActive(); // Returns true if this thread is running
+ void Finish(); // Finish this thread
+
+ // Overrideable:
+public:
+ /* dtor */ virtual ~CMIUtilThread();
+
+ // Methods:
+private:
+ CMIUtilThreadMutex m_mutex;
+ std::thread *m_pThread;
+ bool m_bIsActive;
};
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI common code utility class. Base class for a worker thread active
// object. Runs an 'captive thread'.
//--
-class CMIUtilThreadActiveObjBase
-{
- // Methods:
- public:
- /* ctor */ CMIUtilThreadActiveObjBase();
- //
- bool
- Acquire(); // Obtain a reference to this object
- bool
- Release(); // Release a reference to this object
- bool
- ThreadIsActive(); // Return true if this object is running
- bool
- ThreadJoin(); // Wait for this thread to stop running
- bool
- ThreadKill(); // Force this thread to stop, regardless of references
- bool
- ThreadExecute(); // Start this objects execution in another thread
- void ThreadManage();
-
- // Overrideable:
- public:
- /* dtor */ virtual ~CMIUtilThreadActiveObjBase();
- //
- // Each thread object must supple a unique name that can be used to locate it
- virtual const CMIUtilString &ThreadGetName() const = 0;
-
- // Statics:
- protected:
- static MIuint
- ThreadEntry(void *vpThisClass); // Thread entry point
-
- // Overrideable:
- protected:
- virtual bool
- ThreadRun(bool &vrIsAlive) = 0; // Call the main worker method
- virtual bool
- ThreadFinish() = 0; // Finish of what you were doing
-
- // Attributes:
- protected:
- volatile MIuint m_references; // Stores the current lifetime state of this thread, 0 = running, > 0 = shutting down
- volatile bool m_bHasBeenKilled; // Set to true when this thread has been killed
- CMIUtilThread m_thread; // The execution thread
- CMIUtilThreadMutex
- m_mutex; // This mutex allows us to safely communicate with this thread object across the interface from multiple threads
+class CMIUtilThreadActiveObjBase {
+ // Methods:
+public:
+ /* ctor */ CMIUtilThreadActiveObjBase();
+ //
+ bool Acquire(); // Obtain a reference to this object
+ bool Release(); // Release a reference to this object
+ bool ThreadIsActive(); // Return true if this object is running
+ bool ThreadJoin(); // Wait for this thread to stop running
+ bool ThreadKill(); // Force this thread to stop, regardless of references
+ bool ThreadExecute(); // Start this objects execution in another thread
+ void ThreadManage();
+
+ // Overrideable:
+public:
+ /* dtor */ virtual ~CMIUtilThreadActiveObjBase();
+ //
+ // Each thread object must supple a unique name that can be used to locate it
+ virtual const CMIUtilString &ThreadGetName() const = 0;
+
+ // Statics:
+protected:
+ static MIuint ThreadEntry(void *vpThisClass); // Thread entry point
+
+ // Overrideable:
+protected:
+ virtual bool ThreadRun(bool &vrIsAlive) = 0; // Call the main worker method
+ virtual bool ThreadFinish() = 0; // Finish of what you were doing
+
+ // Attributes:
+protected:
+ volatile MIuint m_references; // Stores the current lifetime state of this
+ // thread, 0 = running, > 0 = shutting down
+ volatile bool
+ m_bHasBeenKilled; // Set to true when this thread has been killed
+ CMIUtilThread m_thread; // The execution thread
+ CMIUtilThreadMutex m_mutex; // This mutex allows us to safely communicate with
+ // this thread object across the interface from
+ // multiple threads
};
-//++ ============================================================================
+//++
+//============================================================================
// Details: MI common code utility class. Handle thread resource locking.
// Put Locks inside all the methods of your Active Object that access
// data shared with the captive thread.
//--
-class CMIUtilThreadLock
-{
- // Methods:
- public:
- /* ctor */
- CMIUtilThreadLock(CMIUtilThreadMutex &vMutex)
- : m_rMutex(vMutex)
- {
- m_rMutex.Lock();
- }
-
- // Overrideable:
- public:
- /* dtor */
- virtual ~CMIUtilThreadLock() { m_rMutex.Unlock(); }
-
- // Attributes:
- private:
- CMIUtilThreadMutex &m_rMutex;
+class CMIUtilThreadLock {
+ // Methods:
+public:
+ /* ctor */
+ CMIUtilThreadLock(CMIUtilThreadMutex &vMutex) : m_rMutex(vMutex) {
+ m_rMutex.Lock();
+ }
+
+ // Overrideable:
+public:
+ /* dtor */
+ virtual ~CMIUtilThreadLock() { m_rMutex.Unlock(); }
+
+ // Attributes:
+private:
+ CMIUtilThreadMutex &m_rMutex;
};
OpenPOWER on IntegriCloud