VR-Link API Documentation for HLA 1.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
List of all members | Classes | Public Member Functions | Protected Member Functions | Protected Attributes | Friends
DtThreadSafe< T > Class Template Reference

a thread safe interface to a value. More...

+ Inheritance diagram for DtThreadSafe< T >:
+ Collaboration diagram for DtThreadSafe< T >:

Classes

class  ConstLockedProxy
 Private class that provides a locked call to the const object. More...
class  LockedProxy
 Private class that provides a locked call to the object. More...
class  SequenceLockImpl
 Private class which implements the Sequence lock. More...

Public Member Functions

 DtThreadSafe (const T &value)
 DtThreadSafe ()
 operator T () const
 Proxy type copy operator.
LockedProxy operator-> ()
 Proxy pointer access operator.
ConstLockedProxy operator-> () const
 Proxy pointer access operator.
DtThreadSafe< T > & operator= (const DtThreadSafe< T > &orig)
 Locked Copy operator,.
DtThreadSafe< T > & operator= (const T &orig)
 Locked Copy operator, from safe value.
DtScopedSequenceLock sequenceLock ()
 Request a sequence lock, this object will maintain a lock on the object during it's life-time.

Protected Member Functions

void lockObject ()
 Lock the external object.
void unlockObject ()
 Unlock the external object.

Protected Attributes

myValue
 Value which is to be thread safe.
DtScopedLockmyExternalLock
 The external lock which allows the sequence lock.
DtMutex myLockMutex
 The mutex which is used to lock when created the external lock.
DtMutex myMutex
 The mutex which is used to make the object thread safe.

Friends

class SequenceLockImpl

Detailed Description

template<typename T>
class DtThreadSafe< T >

a thread safe interface to a value.

Which can be shared between threads. DtThreadSafe provides a safe access to T value. T is assumed to have value semantics and is copyable. DtThreadSafe provides a locked pointer to the underlying value interface.

Warning
Thread safety is only assumed for the duration a single call. Any references, pointers or proxy objects returns (for example iterators) are not thread safe.

Example: Thread safe iteration.

...
{
std::vector<int>::iterator start = aVector->begin();
std::vector<int>::iterator end = aVector->end();
for(;start != end;++start)
{
//Now all access to iterator is considered thread safe due to
*start = 0;
}
}

Constructor & Destructor Documentation

template<typename T>
DtThreadSafe< T >::DtThreadSafe ( const T &  value)
explicit
template<typename T>
DtThreadSafe< T >::DtThreadSafe ( )
explicit

Member Function Documentation

template<typename T>
void DtThreadSafe< T >::lockObject ( )
protected

Lock the external object.

template<typename T>
DtThreadSafe< T >::operator T ( ) const

Proxy type copy operator.

template<typename T>
LockedProxy DtThreadSafe< T >::operator-> ( )

Proxy pointer access operator.

The locked proxy will maintain a lock for the call (typically and the line).

template<typename T>
ConstLockedProxy DtThreadSafe< T >::operator-> ( ) const

Proxy pointer access operator.

The locked proxy will maintain a lock for the call (typically and the line).

template<typename T>
DtThreadSafe<T>& DtThreadSafe< T >::operator= ( const DtThreadSafe< T > &  orig)

Locked Copy operator,.

template<typename T>
DtThreadSafe<T>& DtThreadSafe< T >::operator= ( const T &  orig)

Locked Copy operator, from safe value.

template<typename T>
DtScopedSequenceLock DtThreadSafe< T >::sequenceLock ( )

Request a sequence lock, this object will maintain a lock on the object during it's life-time.

Note: this is fairly expensive and should be called sparingly.

template<typename T>
void DtThreadSafe< T >::unlockObject ( )
protected

Unlock the external object.

Friends And Related Function Documentation

template<typename T>
friend class SequenceLockImpl
friend

Member Data Documentation

template<typename T>
DtScopedLock* DtThreadSafe< T >::myExternalLock
protected

The external lock which allows the sequence lock.

This lock is not used unless a sequence is requested.

template<typename T>
DtMutex DtThreadSafe< T >::myLockMutex
protected

The mutex which is used to lock when created the external lock.

template<typename T>
DtMutex DtThreadSafe< T >::myMutex
mutableprotected

The mutex which is used to make the object thread safe.

template<typename T>
T DtThreadSafe< T >::myValue
protected

Value which is to be thread safe.


The documentation for this class was generated from the following file:

Document ID: Generated on Fri Dec 2 02:42:08 EST 2016 from SVN revision 171416
Copyright © 2005-2016 VT MÄK. All Rights Reserved (www.mak.com)