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 185 : m_lock(host->m_mtx)
205 typedef ObjectLevelLockingPolicy<LockReadingPolicy>
LockRead;
206 typedef ObjectLevelLockingPolicy<LockWritingPolicy>
LockWrite;
208 friend class ObjectLevelLockingPolicy<LockReadingPolicy>;
209 friend class ObjectLevelLockingPolicy<LockWritingPolicy>;
270 : m_lock(Host::sm_mtx)
276 : m_lock(Host::sm_mtx)
282 : m_lock(Host::sm_mtx)
302 typedef ClassLevelLockingPolicy<LockReadingPolicy>
LockRead;
303 typedef ClassLevelLockingPolicy<LockWritingPolicy>
LockWrite;
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>
330 #endif // TE_THREADING_POLICIES == TE_MULTITHREADING 335 #endif // __TERRALIB_COMMON_INTERNAL_THREADINGPOLICIES_H This policy doesn't actually perform a lock.
~ObjectLevelLockable()
Destructor.
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
ObjectLevelLockable()
Default constructor.
LockingPolicy m_lock
lock policy.
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.
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.
ClassLevelLockingPolicy()
Default constructor.
static MutexPolicy sm_mtx
The mutex used to control the class lock.