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