28 #ifndef __TERRALIB_COMMON_INTERNAL_THREADINGPOLICIES_H
29 #define __TERRALIB_COMMON_INTERNAL_THREADINGPOLICIES_H
32 #include <boost/noncopyable.hpp>
33 #include <boost/thread.hpp>
35 #define TE_SINGLETHREADING 1
36 #define TE_MULTITHREADING 2
40 #ifndef TE_THREADING_POLICIES
41 #define TE_THREADING_POLICIES TE_MULTITHREADING
44 #if !defined TE_DEFAULT_MUTEX_POLICY
45 #define TE_DEFAULT_MUTEX_POLICY ::boost::mutex
48 #if !defined TE_DEFAULT_LOCK_READING_POLICY
49 #define TE_DEFAULT_LOCK_READING_POLICY ::boost::lock_guard<TE_DEFAULT_MUTEX_POLICY>
52 #if !defined TE_DEFAULT_LOCK_WRITING_POLICY
53 #define TE_DEFAULT_LOCK_WRITING_POLICY ::boost::lock_guard<TE_DEFAULT_MUTEX_POLICY>
71 class MutexPolicy = void,
72 class LockReadingPolicy = void,
134 #if TE_THREADING_POLICIES == TE_MULTITHREADING
317 class MutexPolicy = void,
318 class LockReadingPolicy = void,
319 class LockWritingPolicy =
void>
class ObjectLevelLockable :
public NonLockable<ObjectLevelLockable<Host, MutexPolicy, LockReadingPolicy, LockWritingPolicy>, MutexPolicy, LockReadingPolicy, LockWritingPolicy>
326 class LockWritingPolicy =
TE_DEFAULT_LOCK_WRITING_POLICY>
class ClassLevelLockable :
public NonLockable<ClassLevelLockable<Host, MutexPolicy, LockReadingPolicy, LockWritingPolicy>, MutexPolicy, LockReadingPolicy, LockWritingPolicy>
#define TE_DEFAULT_LOCK_READING_POLICY
#define TE_DEFAULT_LOCK_WRITING_POLICY
#define TE_DEFAULT_MUTEX_POLICY
This class acquires a lock over the object class.
ClassLevelLockingPolicy()
Default constructor.
~ClassLevelLockingPolicy()
Destructor.
ClassLevelLockingPolicy(const ClassLevelLockingPolicy &)
ClassLevelLockingPolicy(const Host *host)
Constructor to keep the semantics of object-level lock.
LockingPolicy m_lock
lock policy.
ClassLevelLockingPolicy(const Host &host)
Constructor to keep the semantics of object-level lock.
ClassLevelLockingPolicy & operator=(const ClassLevelLockingPolicy &)
This policy assures a class-level locking scheme for a derived class.
ClassLevelLockingPolicy< LockReadingPolicy > LockRead
ClassLevelLockingPolicy< LockWritingPolicy > LockWrite
volatile Host VolatileType
static MutexPolicy sm_mtx
The mutex used to control the class lock.
This class doesn't truelly acquire a lock over the host object/class.
NonLockingPolicy(const Host *)
Constructor.
~NonLockingPolicy()
Destructor.
NonLockingPolicy(const NonLockingPolicy &)
NonLockingPolicy & operator=(const NonLockingPolicy &)
NonLockingPolicy()
Constructor to keep the semantics of class-level lock.
NonLockingPolicy(const Host &)
Constructor.
This policy doesn't actually perform a lock.
LockWritingPolicy LockWritingPolicyType
volatile Host VolatileType
NonLockingPolicy< LockWritingPolicy > LockWrite
LockReadingPolicy LockReadingPolicyType
MutexPolicy MutexPolicyType
NonLockingPolicy< LockReadingPolicy > LockRead
This class acquires a lock over the host object.
ObjectLevelLockingPolicy(const Host *host)
Through this constructor the pointed host object will be locked.
~ObjectLevelLockingPolicy()
Destructor.
ObjectLevelLockingPolicy(const Host &host)
Through this constructor the host object will be locked.
ObjectLevelLockingPolicy & operator=(const ObjectLevelLockingPolicy &)
ObjectLevelLockingPolicy(const ObjectLevelLockingPolicy &)
LockingPolicy m_lock
lock policy.
This policy assures an object-level locking scheme for a derived class.
ObjectLevelLockable(const ObjectLevelLockable &)
Copy constructor.
volatile Host VolatileType
MutexPolicy m_mtx
The mutex used to control the object lock.
ObjectLevelLockable()
Default constructor.
ObjectLevelLockingPolicy< LockReadingPolicy > LockRead
~ObjectLevelLockable()
Destructor.
ObjectLevelLockingPolicy< LockWritingPolicy > LockWrite