Classes | Public Member Functions | Protected Member Functions | Protected Attributes | Friends
MAKLogger::DtThreadSafe< T > Class Template Reference

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

+ Inheritance diagram for MAKLogger::DtThreadSafe< T >:
+ Collaboration diagram for MAKLogger::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 Implementation.
 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.
DtScopedLock * myExternalLock
 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 threadsafe.

Friends

class SequenceLockImpl

Detailed Description

template<typename T>
class MAKLogger::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)
    {
       *start = 0;
    }
 }

Member Function Documentation

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

Proxy pointer access operator.

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

template<typename T >
DtThreadSafe< T >::ConstLockedProxy MAKLogger::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 >
DtScopedSequenceLock MAKLogger::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.


Member Data Documentation

template<typename T>
DtScopedLock* MAKLogger::DtThreadSafe< T >::myExternalLock [protected]

The external lock which allows the sequence lock.

This lock is not used unless a sequence is requested.


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

Document ID: Generated on Tue Oct 11 19:41:03 EDT 2011 from SVN revision 107422
Copyright © 2005-2011 VT MÄK Inc. All Rights Reserved (www.mak.com)