diff options
Diffstat (limited to 'thirdparty/bullet/LinearMath/btThreads.h')
-rw-r--r-- | thirdparty/bullet/LinearMath/btThreads.h | 177 |
1 files changed, 0 insertions, 177 deletions
diff --git a/thirdparty/bullet/LinearMath/btThreads.h b/thirdparty/bullet/LinearMath/btThreads.h deleted file mode 100644 index b2227e1724..0000000000 --- a/thirdparty/bullet/LinearMath/btThreads.h +++ /dev/null @@ -1,177 +0,0 @@ -/* -Copyright (c) 2003-2014 Erwin Coumans http://bullet.googlecode.com - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef BT_THREADS_H -#define BT_THREADS_H - -#include "btScalar.h" // has definitions like SIMD_FORCE_INLINE - -#if defined(_MSC_VER) && _MSC_VER >= 1600 -// give us a compile error if any signatures of overriden methods is changed -#define BT_OVERRIDE override -#endif - -#ifndef BT_OVERRIDE -#define BT_OVERRIDE -#endif - -// Don't set this to larger than 64, without modifying btThreadSupportPosix -// and btThreadSupportWin32. They use UINT64 bit-masks. -const unsigned int BT_MAX_THREAD_COUNT = 64; // only if BT_THREADSAFE is 1 - -// for internal use only -bool btIsMainThread(); -bool btThreadsAreRunning(); -unsigned int btGetCurrentThreadIndex(); -void btResetThreadIndexCounter(); // notify that all worker threads have been destroyed - -/// -/// btSpinMutex -- lightweight spin-mutex implemented with atomic ops, never puts -/// a thread to sleep because it is designed to be used with a task scheduler -/// which has one thread per core and the threads don't sleep until they -/// run out of tasks. Not good for general purpose use. -/// -class btSpinMutex -{ - int mLock; - -public: - btSpinMutex() - { - mLock = 0; - } - void lock(); - void unlock(); - bool tryLock(); -}; - -// -// NOTE: btMutex* is for internal Bullet use only -// -// If BT_THREADSAFE is undefined or 0, should optimize away to nothing. -// This is good because for the single-threaded build of Bullet, any calls -// to these functions will be optimized out. -// -// However, for users of the multi-threaded build of Bullet this is kind -// of bad because if you call any of these functions from external code -// (where BT_THREADSAFE is undefined) you will get unexpected race conditions. -// -SIMD_FORCE_INLINE void btMutexLock(btSpinMutex* mutex) -{ -#if BT_THREADSAFE - mutex->lock(); -#else - (void)mutex; -#endif // #if BT_THREADSAFE -} - -SIMD_FORCE_INLINE void btMutexUnlock(btSpinMutex* mutex) -{ -#if BT_THREADSAFE - mutex->unlock(); -#else - (void)mutex; -#endif // #if BT_THREADSAFE -} - -SIMD_FORCE_INLINE bool btMutexTryLock(btSpinMutex* mutex) -{ -#if BT_THREADSAFE - return mutex->tryLock(); -#else - (void)mutex; - return true; -#endif // #if BT_THREADSAFE -} - -// -// btIParallelForBody -- subclass this to express work that can be done in parallel -// -class btIParallelForBody -{ -public: - virtual ~btIParallelForBody() {} - virtual void forLoop(int iBegin, int iEnd) const = 0; -}; - -// -// btIParallelSumBody -- subclass this to express work that can be done in parallel -// and produces a sum over all loop elements -// -class btIParallelSumBody -{ -public: - virtual ~btIParallelSumBody() {} - virtual btScalar sumLoop(int iBegin, int iEnd) const = 0; -}; - -// -// btITaskScheduler -- subclass this to implement a task scheduler that can dispatch work to -// worker threads -// -class btITaskScheduler -{ -public: - btITaskScheduler(const char* name); - virtual ~btITaskScheduler() {} - const char* getName() const { return m_name; } - - virtual int getMaxNumThreads() const = 0; - virtual int getNumThreads() const = 0; - virtual void setNumThreads(int numThreads) = 0; - virtual void parallelFor(int iBegin, int iEnd, int grainSize, const btIParallelForBody& body) = 0; - virtual btScalar parallelSum(int iBegin, int iEnd, int grainSize, const btIParallelSumBody& body) = 0; - virtual void sleepWorkerThreadsHint() {} // hint the task scheduler that we may not be using these threads for a little while - - // internal use only - virtual void activate(); - virtual void deactivate(); - -protected: - const char* m_name; - unsigned int m_savedThreadCounter; - bool m_isActive; -}; - -// set the task scheduler to use for all calls to btParallelFor() -// NOTE: you must set this prior to using any of the multi-threaded "Mt" classes -void btSetTaskScheduler(btITaskScheduler* ts); - -// get the current task scheduler -btITaskScheduler* btGetTaskScheduler(); - -// get non-threaded task scheduler (always available) -btITaskScheduler* btGetSequentialTaskScheduler(); - -// create a default task scheduler (Win32 or pthreads based) -btITaskScheduler* btCreateDefaultTaskScheduler(); - -// get OpenMP task scheduler (if available, otherwise returns null) -btITaskScheduler* btGetOpenMPTaskScheduler(); - -// get Intel TBB task scheduler (if available, otherwise returns null) -btITaskScheduler* btGetTBBTaskScheduler(); - -// get PPL task scheduler (if available, otherwise returns null) -btITaskScheduler* btGetPPLTaskScheduler(); - -// btParallelFor -- call this to dispatch work like a for-loop -// (iterations may be done out of order, so no dependencies are allowed) -void btParallelFor(int iBegin, int iEnd, int grainSize, const btIParallelForBody& body); - -// btParallelSum -- call this to dispatch work like a for-loop, returns the sum of all iterations -// (iterations may be done out of order, so no dependencies are allowed) -btScalar btParallelSum(int iBegin, int iEnd, int grainSize, const btIParallelSumBody& body); - -#endif |