From ea0df3e4cb75a7a104a81e050c019049219c4fee Mon Sep 17 00:00:00 2001 From: sapier Date: Fri, 31 Jan 2014 22:16:47 +0100 Subject: jthread remove locks that aren't absolutely required add c++11 atomic support (optional) --- src/jthread/jthread.h | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) (limited to 'src/jthread/jthread.h') diff --git a/src/jthread/jthread.h b/src/jthread/jthread.h index f7bce6f9a..89743a3e3 100644 --- a/src/jthread/jthread.h +++ b/src/jthread/jthread.h @@ -26,9 +26,12 @@ */ #ifndef JTHREAD_H - #define JTHREAD_H +#if __cplusplus >= 201103L +#include +#endif + #include "jthread/jmutex.h" #define ERR_JTHREAD_CANTINITMUTEX -1 @@ -43,11 +46,14 @@ public: JThread(); virtual ~JThread(); int Start(); - void Stop(); + inline void Stop() + { requeststop = true; } int Kill(); virtual void *Thread() = 0; - bool IsRunning(); - bool StopRequested(); + inline bool IsRunning() + { return running; } + inline bool StopRequested() + { return requeststop; } void *GetReturnValue(); bool IsSameThread(); @@ -75,13 +81,35 @@ private: pthread_t threadid; + /* + * reading and writing bool values is atomic on all relevant architectures + * ( x86 + arm ). No need to waste time for locking here. + * once C++11 is supported we can tell compiler to handle cpu caches correct + * too. This should cause additional improvement (and silence thread + * concurrency check tools. + */ +#if __cplusplus >= 201103L + std::atomic_bool started; +#else bool started; +#endif #endif // WIN32 void *retval; + /* + * reading and writing bool values is atomic on all relevant architectures + * ( x86 + arm ). No need to waste time for locking here. + * once C++11 is supported we can tell compiler to handle cpu caches correct + * too. This should cause additional improvement (and silence thread + * concurrency check tools. + */ +#if __cplusplus >= 201103L + std::atomic_bool running; + std::atomic_bool requeststop; +#else bool running; bool requeststop; +#endif - JMutex runningmutex; JMutex continuemutex,continuemutex2; }; -- cgit v1.2.3