SynchronizedObject (同步对象,支持多线程)
说明:
使得CppUnit测试框架支持多线程,在实现的过程中主要使用了RIIA的思想,如果单个的测试类需要支持多线程,就需要派生自该类,设置相关的同步机制。
预定义宏:
在实现的过程中,支持了类得嵌套定义,互斥体和临界区的抽象定义,保证了多线程的访问,其中临界区使用了RIIA的思想。
类设计详解:
类名:
class CPPUNIT_API SynchronizedObject
类图:
内嵌类型:
<public 支持用户的继承实现>
class SynchronizationObject
{
public:
SynchronizationObject() {}
virtual ~SynchronizationObject() {}
virtual void lock() {}
virtual void unlock() {}
}; 互斥体,用户自定义实现相关的lock和unlock即可。
<protected:给继承类使用,对外不暴露>
class ExclusiveZone
{
SynchronizationObject *m_syncObject;
public:
ExclusiveZone( SynchronizationObject*syncObject )
: m_syncObject( syncObject )
{
m_syncObject->lock();
}
~ExclusiveZone()
{
m_syncObject->unlock ();
}
}; // 临界区,实现了资源获得即初始化的思想模型
成员变量:
protected:
SynchronizationObject *m_syncObject; // 互斥体
成员函数:
SynchronizedObject(SynchronizationObject *syncObject =0 )
说明:
构造函数,设置相关的互斥体。
virtual~SynchronizedObject();
说明:
析构函数,释放相关的互斥体。
virtual void
setSynchronizationObject(SynchronizationObject*syncObjec)
说明:
保护访问段函数,给继承类设置自己的互斥体。
私有函数
private:
SynchronizedObject( const SynchronizedObject© );
void operator =( const SynchronizedObject© );
不支持拷贝和赋值操作符。