1#ifndef CPPUNIT_SYNCHRONIZEDOBJECT_H
2#define CPPUNIT_SYNCHRONIZEDOBJECT_H
3
4#include <cppunit/Portability.h>
5
6
7namespace CppUnit
8{
9
10/*! \brief Base class for synchronized object.
11 *
12 * Synchronized object are object which members are used concurrently by mutiple
13 * threads.
14 *
15 * This class define the class SynchronizationObject which must be subclassed
16 * to implement an actual lock.
17 *
18 * Each instance of this class holds a pointer on a lock object.
19 *
20 * See src/msvc6/MfcSynchronizedObject.h for an example.
21 */
22class CPPUNIT_API SynchronizedObject
23{
24public:
25  /*! \brief Abstract synchronization object (mutex)
26   */
27  class SynchronizationObject
28  {
29    public:
30      SynchronizationObject() {}
31      virtual ~SynchronizationObject() {}
32
33      virtual void lock() {}
34      virtual void unlock() {}
35  };
36
37  /*! Constructs a SynchronizedObject object.
38   */
39  SynchronizedObject( SynchronizationObject *syncObject =0 );
40
41  /// Destructor.
42  virtual ~SynchronizedObject();
43
44protected:
45  /*! \brief Locks a synchronization object in the current scope.
46   */
47  class ExclusiveZone
48  {
49    SynchronizationObject *m_syncObject;
50
51  public:
52    ExclusiveZone( SynchronizationObject *syncObject )
53        : m_syncObject( syncObject )
54    {
55      m_syncObject->lock();
56    }
57
58    ~ExclusiveZone()
59    {
60      m_syncObject->unlock ();
61    }
62  };
63
64  virtual void setSynchronizationObject( SynchronizationObject *syncObject );
65
66protected:
67  SynchronizationObject *m_syncObject;
68
69private:
70  /// Prevents the use of the copy constructor.
71  SynchronizedObject( const SynchronizedObject &copy );
72
73  /// Prevents the use of the copy operator.
74  void operator =( const SynchronizedObject &copy );
75};
76
77
78
79} //  namespace CppUnit
80
81
82#endif  // CPPUNIT_SYNCHRONIZEDOBJECT_H
83