diff options
| author | Sheikh Dawood Abdul Ajees <[email protected]> | 2018-02-12 15:31:42 -0600 |
|---|---|---|
| committer | Sheikh Dawood Abdul Ajees <[email protected]> | 2018-02-12 15:31:42 -0600 |
| commit | 52dae55c0c65f42caffa9d803be27be44ac4b8a3 (patch) | |
| tree | c2fa77a97691d026593fe6aa45f1a56389fc5c70 /PhysX_3.4/Source/Common | |
| parent | PhysX 3.4, APEX 1.4 patch release @23472123 (diff) | |
| download | physx-3.4-52dae55c0c65f42caffa9d803be27be44ac4b8a3.tar.xz physx-3.4-52dae55c0c65f42caffa9d803be27be44ac4b8a3.zip | |
PhysX 3.4, APEX 1.4 patch release @23576764
Diffstat (limited to 'PhysX_3.4/Source/Common')
| -rw-r--r-- | PhysX_3.4/Source/Common/src/CmReaderWriterLock.h | 202 |
1 files changed, 0 insertions, 202 deletions
diff --git a/PhysX_3.4/Source/Common/src/CmReaderWriterLock.h b/PhysX_3.4/Source/Common/src/CmReaderWriterLock.h deleted file mode 100644 index a5e8f3df..00000000 --- a/PhysX_3.4/Source/Common/src/CmReaderWriterLock.h +++ /dev/null @@ -1,202 +0,0 @@ -// This code contains NVIDIA Confidential Information and is disclosed to you -// under a form of NVIDIA software license agreement provided separately to you. -// -// Notice -// NVIDIA Corporation and its licensors retain all intellectual property and -// proprietary rights in and to this software and related documentation and -// any modifications thereto. Any use, reproduction, disclosure, or -// distribution of this software and related documentation without an express -// license agreement from NVIDIA Corporation is strictly prohibited. -// -// ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES -// NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO -// THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT, -// MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. -// -// Information and code furnished is believed to be accurate and reliable. -// However, NVIDIA Corporation assumes no responsibility for the consequences of use of such -// information or for any infringement of patents or other rights of third parties that may -// result from its use. No license is granted by implication or otherwise under any patent -// or patent rights of NVIDIA Corporation. Details are subject to change without notice. -// This code supersedes and replaces all information previously supplied. -// NVIDIA Corporation products are not authorized for use as critical -// components in life support devices or systems without express written approval of -// NVIDIA Corporation. -// -// Copyright (c) 2008-2017 NVIDIA Corporation. All rights reserved. -// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved. -// Copyright (c) 2001-2004 NovodeX AG. All rights reserved. - - -#ifndef PX_PHYSICS_COMMON_READERWRITERLOCK -#define PX_PHYSICS_COMMON_READERWRITERLOCK - -//#define PX_RAYCAST_READWRITE_LOCK - -/* -Implements a full reader writer lock, i.e. multiple readers or a single writer. - -Below is an implementation using just a mutex for non win32 platforms. - -Disable the full reader/writer lock by default. Using the full reader writer lock -results in better performance when a lot of parallel raycasts are performed but is -more costly when only a few are performed and slows down serial raycasts. -*/ - -namespace physx -{ -namespace Cm -{ - -#ifdef PX_RAYCAST_READWRITE_LOCK - class ReaderWriterLock - { - public: - - PX_INLINE ReaderWriterLock() - { - hReaderEvent=CreateEvent(NULL,TRUE,FALSE,NULL); - PX_ASSERT(hReaderEvent!=NULL); - - hMutex = CreateEvent(NULL,FALSE,TRUE,NULL); - PX_ASSERT(hMutex!=NULL); - - InitializeCriticalSection(&writerMutex); - counter = -1; - recursionCounter=0; - } - PX_INLINE ~ReaderWriterLock() - { - if(hReaderEvent!=NULL) - CloseHandle(hReaderEvent); - if(hMutex!=NULL) - CloseHandle(hMutex); - DeleteCriticalSection(&writerMutex); - } - - PX_INLINE void lockReader() - { - if(InterlockedIncrement(&counter) == 0) - { - WaitForSingleObject(hMutex, INFINITE); - SetEvent(hReaderEvent); - } - - WaitForSingleObject(hReaderEvent,INFINITE); - } - - PX_INLINE void lockWriter() - { - EnterCriticalSection(&writerMutex); - - //we may already have the global mutex(really an event so we have to handle recursion ourselves) - recursionCounter++; - if(recursionCounter==1) - WaitForSingleObject(hMutex, INFINITE); - } - PX_INLINE void unlockReader() - { - if(InterlockedDecrement(&counter) < 0) - { - ResetEvent(hReaderEvent); - SetEvent(hMutex); - } - } - PX_INLINE void unlockWriter() - { - recursionCounter--; - if(recursionCounter==0) - SetEvent(hMutex); - - LeaveCriticalSection(&writerMutex); - } - - private: - - HANDLE hReaderEvent; - HANDLE hMutex; - CRITICAL_SECTION writerMutex; - LONG counter;//count the number of readers in the lock. - LONG recursionCounter;//handle recursive writer locking - }; -#else - /* - TODO: implement proper reader writer lock for other platforms, eg cell os has a native reader writer lock. - */ - - class ReaderWriterLock - { - PX_NOCOPY(ReaderWriterLock) - public: - - PX_INLINE void lockReader() - { - //lock.lock(); - lock.lockReader(); - } - PX_INLINE void lockWriter() - { - //lock.lock(); - lock.lockWriter(); - } - PX_INLINE void unlockReader() - { - //lock.unlock(); - lock.unlockReader(); - } - PX_INLINE void unlockWriter() - { - //lock.unlock(); - lock.unlockWriter(); - } - - private: - - //Ps::Mutex lock; - - Ps::AtomicRwLock lock; - }; -#endif - - class TakeReaderLock - { - public: - - TakeReaderLock(ReaderWriterLock &l) : lock(l) - { - lock.lockReader(); - } - ~TakeReaderLock() - { - lock.unlockReader(); - } - - private: - TakeReaderLock& operator=(const TakeReaderLock&); - ReaderWriterLock &lock; - }; - - class TakeWriterLock - { - public: - - TakeWriterLock(ReaderWriterLock &l) : lock(l) - { - lock.lockWriter(); - } - ~TakeWriterLock() - { - lock.unlockWriter(); - } - - private: - TakeWriterLock& operator=(const TakeWriterLock&); - ReaderWriterLock &lock; - }; - - -} // namespace Cm - -} - -#endif |