VR-Link API Documentation for HLA Evolved
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 >:

List of all members.

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.

 DtThreadSafe<std::vector<int> > aVector;
 ...
 {
    DtScopedSequenceLock lock = aVector.sequenceLock();
    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 [mutable, protected]

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 Mon May 14 08:06:18 EDT 2012 from SVN revision 114750
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)