Go to the documentation of this file.
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
208 friend class ObjectLevelLockingPolicy<LockReadingPolicy>;
209 friend class ObjectLevelLockingPolicy<LockWritingPolicy>;
305 friend class ClassLevelLockingPolicy<LockReadingPolicy>;
306 friend class ClassLevelLockingPolicy<LockWritingPolicy>;
315 #else // TE_THREADING_POLICIES == TE_SINGLETHREADING
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>
330 #endif // TE_THREADING_POLICIES == TE_MULTITHREADING
335 #endif // __TERRALIB_COMMON_INTERNAL_THREADINGPOLICIES_H
~ClassLevelLockingPolicy()
Destructor.
This class doesn't truelly acquire a lock over the host object/class.
This class acquires a lock over the object class.
ObjectLevelLockingPolicy(const ObjectLevelLockingPolicy &)
ClassLevelLockingPolicy< LockWritingPolicy > LockWrite
LockingPolicy m_lock
lock policy.
#define TE_DEFAULT_MUTEX_POLICY
NonLockingPolicy< LockWritingPolicy > LockWrite
LockingPolicy m_lock
lock policy.
ClassLevelLockingPolicy(const Host &host)
Constructor to keep the semantics of object-level lock.
ObjectLevelLockingPolicy & operator=(const ObjectLevelLockingPolicy &)
friend class ObjectLevelLockingPolicy< LockWritingPolicy >
NonLockingPolicy()
Constructor to keep the semantics of class-level lock.
friend class ClassLevelLockingPolicy< LockWritingPolicy >
~NonLockingPolicy()
Destructor.
~ObjectLevelLockable()
Destructor.
ObjectLevelLockable()
Default constructor.
ClassLevelLockingPolicy(const Host *host)
Constructor to keep the semantics of object-level lock.
This policy assures a class-level locking scheme for a derived class.
LockWritingPolicy LockWritingPolicyType
~ObjectLevelLockingPolicy()
Destructor.
ObjectLevelLockingPolicy(const Host &host)
Through this constructor the host object will be locked.
#define TE_DEFAULT_LOCK_WRITING_POLICY
ClassLevelLockingPolicy()
Default constructor.
This class acquires a lock over the host object.
ObjectLevelLockingPolicy(const Host *host)
Through this constructor the pointed host object will be locked.
ObjectLevelLockingPolicy< LockWritingPolicy > LockWrite
This policy assures an object-level locking scheme for a derived class.
MutexPolicy MutexPolicyType
#define TE_DEFAULT_LOCK_READING_POLICY
MutexPolicy m_mtx
The mutex used to control the object lock.
ObjectLevelLockable(const ObjectLevelLockable &)
Copy constructor.
NonLockingPolicy(const NonLockingPolicy &)
NonLockingPolicy & operator=(const NonLockingPolicy &)
LockReadingPolicy LockReadingPolicyType
ClassLevelLockingPolicy(const ClassLevelLockingPolicy &)
friend class ObjectLevelLockingPolicy< LockReadingPolicy >
NonLockingPolicy(const Host *)
Constructor.
volatile Host VolatileType
volatile Host VolatileType
ClassLevelLockingPolicy< LockReadingPolicy > LockRead
NonLockingPolicy(const Host &)
Constructor.
This policy doesn't actually perform a lock.
friend class ClassLevelLockingPolicy< LockReadingPolicy >
volatile Host VolatileType
static MutexPolicy sm_mtx
The mutex used to control the class lock.
NonLockingPolicy< LockReadingPolicy > LockRead
ClassLevelLockingPolicy & operator=(const ClassLevelLockingPolicy &)
ObjectLevelLockingPolicy< LockReadingPolicy > LockRead