
wprime是一款通过算质数来测试计算机运算能力等的软件(特别是并行能力),但与super pi只能支持单线程不同的是,wprime最多可以支持八个线程,也就是说可以支持八核心处理器,并且测试多核心处理器性能时比super pi更准确。wprime是一款通过算质数来测试计算机运算能力等的软件(特别是并行能力),但与super pi只能支持单线程不同的是,wprime最多可以支持八个线程,也就是说可以支持八核心处理器,并且测试多核心处理器性能时比super pi更准确。wprime是一款通过算质数来测试计算机运算能力等的软件(特别是并行能力),但与superpi只能支持单线程不同的是,wprime可以支持多个线程ccriticalsection 调用 2次,也就是说可以支持八核心处理器,并且测试多核心处理器性能时比superpi更准确。
[SynchronizedObject]
相关文件:SynchronizedObject.h,SynchronizedObject.cpp

由上面的分析我们知道,同步容器并不能保证多线程安全,而并发容器是针对多个线程并发访问而设计的,在jdk5.0引入了concurrent包,其中提供了很多并发容器,极大的提升同步容器类的性能。之所以会出现运行结果1所示的结果,是因为线程执行体的方法不具备同步安全性——程序中有两个并发线程在修改fkaccount对象。如果为0状态,则表明已经有其他的线程(假设为线程x)正在执“synchronized()”,那么这个线程a将会暂时阻塞,让出cpu资源,进入到线程池中去等待,直到另外的线程x执行完相关的同步代码,线程x并将object对象(也叫做同步监视器)的标志位变为1状态,此时,线程a的阻塞就会被取消,线程a继续运行,该线程会将object对象(或同步监视器)的标志位(或者对象锁)变为0状态,防止其他的线程再次进入到相关的同步代码块中。
SynchronizedObject定义了一个public属性的abstract inner class——SynchronizationObject,代表具备同步属性的对象:
class SynchronizationObject
{
public:
SynchronizationObject() {}
virtual ~SynchronizationObject() {}
virtual void lock() {}
virtual void unlock() {}
};

此类定义了互斥锁功能,但具体行为需在其派生类中实现。不同环境下的实现方式想必也不尽相同。随CppUnit源码所附的范例中有个MfcSynchronizationObject就是SynchronizationObject的子类,它使用了MFC的CCriticalSection:
class MfcSynchronizationObject
: public CppUnit::SynchronizedObject::SynchronizationObject
{
CCriticalSection m_syncObject;
public:
void lock()
{
m_syncObject.Lock();
}
void unlock()
{
m_syncObject.Unlock();
}
};
SynchronizedObject还定义了一个protected属性的inner class——ExclusiveZone,作为内部使用的辅助类。它用于在当前作用域内锁定一个SynchronizationObject的实例。其实现类似于std::auto_ptr,它持有一个指向SynchronizationObject对象的指针,ctor中调用lock,dtor中调用unlock:

class ExclusiveZone
{
SynchronizationObject *m_syncObject;
public:
ExclusiveZone( SynchronizationObject *syncObject )
: m_syncObject( syncObject )
{
m_syncObject->lock();
}
~ExclusiveZone()
{
m_syncObject->unlock ();
}
};
这种数据包括 :windows实例句柄(用于加载资源)ccriticalsection 调用 2次,指向应用程序当前的 cwinapp和cwinthread对象的指针,ole模块引 用计数,以及维护windows对象句柄与相应的mfc对象实例 之间连接的各种映射等。这种数据包括:windows实例句柄(用于加载资源),指向应用程序当前的cwinapp和cwinthread对象的指针,ole模块引用计数,以及维护windows对象句柄与相应的mfc对象实例之间连接的各种映射等。一个指向指针的指针,它指向的指针指向调用方请求的托管类型实例。
SynchronizationObject *m_syncObject;

并管理其生命周期,在dtor中delete之。至于如何传入该指针,则提供了两种方法:
SynchronizedObject::SynchronizedObject( SynchronizationObject *syncObject )
: m_syncObject( syncObject == 0 ? new SynchronizationObject() :
syncObject )
{
}
void SynchronizedObject::setSynchronizationObject( SynchronizationObject *syncObject )
{
delete m_syncObject;
m_syncObject = syncObject;
}
在讲述TestResult之前,还有一些障碍要扫清。
[TestListener]
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-112547-1.html