sigx::lock_acquirer< I_policy, T_type, T_mutex, std::tr1::true_type > Class Template Reference
[Threadsafety]

Specialization for a lockable_base derived object; locks the given lockable object (e.g. a mutex_lockable) and ensures threadsafe write access to the locked type. More...

#include <lock_acquirer.h>

Inheritance diagram for sigx::lock_acquirer< I_policy, T_type, T_mutex, std::tr1::true_type >:

sigx::lock_acquirer< I_policy,boost::mpl::eval_if< std::tr1::is_const< T_type >,std::tr1::add_const< T_type::acquired_type >,boost::mpl::identity< T_type::acquired_type > >::type, T_mutex > sigx::noncopyable sigx::nonpointeraliasing

Public Member Functions

 lock_acquirer (lockable_type &_a_lockable)
 Constructs a lock_acquirer from a lockable.
template<typename T_lockfwd_arg1 >
 lock_acquirer (lockable_type &_a_lockable, T_lockfwd_arg1 lockfwd_arg1)
 Constructs a lock_acquirer from a volatile type to protect, a lock and an additional argument forwarded to the lock constructor.

Detailed Description

template<locking_policy I_policy, typename T_type, typename T_mutex>
class sigx::lock_acquirer< I_policy, T_type, T_mutex, std::tr1::true_type >

Specialization for a lockable_base derived object; locks the given lockable object (e.g. a mutex_lockable) and ensures threadsafe write access to the locked type.

Collects acquisition of a mutex lock and a volatile_cast from the volatile object contained in the lockable. A lock_acquirer object is initialized with a lockable object. During its lifetime, a lock_acquirer keeps the lock acquired. Also, lock_acquirer offers write access to the volatile-stripped object. The access is offered with a related access_acquiree() function. The volatile_cast is performed by access_acquiree(). The cast is semantically valid because lock_acquirer keeps the lock acquired for its lifetime.

The following template arguments are used:

The lock_acquirer chooses the appropriate lock manager for the lock automatically by applying the choose_lock.

Note:
The locked type can only be accessed with access_acquiree()
    // somewhere
    mutex_lockable<int> lockable_int;
    
    // a scope somewhere else
    {
        lock_acquirer<writelock, mutex_lockable<int> > l(lockable_int);
        int& i = access_acquiree(l);
        i = 42;
    }

Constructor & Destructor Documentation

template<locking_policy I_policy, typename T_type , typename T_mutex >
sigx::lock_acquirer< I_policy, T_type, T_mutex, std::tr1::true_type >::lock_acquirer ( lockable_type &  _a_lockable  )  [inline, explicit]

Constructs a lock_acquirer from a lockable.

Note:
Acquires the lock immediately, unlocks when it goes out of scope

template<locking_policy I_policy, typename T_type , typename T_mutex >
template<typename T_lockfwd_arg1 >
sigx::lock_acquirer< I_policy, T_type, T_mutex, std::tr1::true_type >::lock_acquirer ( lockable_type &  _a_lockable,
T_lockfwd_arg1  lockfwd_arg1 
) [inline]

Constructs a lock_acquirer from a volatile type to protect, a lock and an additional argument forwarded to the lock constructor.

Note:
Acquires the lock immediately, unlocks when it goes out of scope


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

Generated on Wed Jan 28 21:38:00 2009 for sigx++ by  doxygen 1.5.8