Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

PsMultiThreadedController Class Reference

a controller that uses a multi-threaded scheduler More...

#include <PsMultiThreadedController.h>

Inheritance diagram for PsMultiThreadedController:

Inheritance graph
[legend]
Collaboration diagram for PsMultiThreadedController:

Collaboration graph
[legend]
List of all members.

Public Methods

 PsMultiThreadedController (PsObjectDescriptor &initialObjects, const PsDate &initialDate, unsigned int numberOfThreads)
 constructor

 PsMultiThreadedController (PsObjectDescriptor &initialObjects, const PsDate &initialDate)
 constructor

virtual ~PsMultiThreadedController ()
 destructor

virtual PsnSchedulercreateScheduler ()
 redefine to create a multihtreaded scheduler

virtual void run ()
 redefine run to install a local memory manager


Protected Attributes

unsigned int _numberOfThreads
 the number of threads created


Detailed Description

a controller that uses a multi-threaded scheduler

Author:
David Margery ( last change by )
Version:

Definition at line 33 of file PsMultiThreadedController.h.


Constructor & Destructor Documentation

PsMultiThreadedController::PsMultiThreadedController PsObjectDescriptor   initialObjects,
const PsDate   initialDate,
unsigned int    numberOfThreads
 

constructor

Parameters:
numberOfThreads the number of threads to create

Definition at line 29 of file PsMultiThreadedController.cxx.

References PsNameServer::getCanonicalRepresentation(), PsName::getNameServer(), PsDate, and PsName::setNameServer().

00031                                                                                     : 
00032    PsController(initialObjects,
00033                 initialDate),
00034    _numberOfThreads (numberOfThreads) 
00035 {
00036    //convert the actual name Server to non ref counting name server to avoid contention on the name server locks during ref counting operations
00037    PsNoRefCountingNameServer<STL_ALLOC> * nameServer = new PsNoRefCountingNameServer<STL_ALLOC> (PsName::getNameServer()->getCanonicalRepresentation () ) ;
00038    PsName::setNameServer (nameServer ) ;
00039 }

PsMultiThreadedController::PsMultiThreadedController PsObjectDescriptor   initialObjects,
const PsDate   initialDate
 

constructor

Parameters:
numberOfThreads the number of threads to create reads the number of threads from the NumberOfThreads scheduling parameter or defaults to 2

Definition at line 41 of file PsMultiThreadedController.cxx.

References _numberOfThreads, PsConfigurationParameterDescriptor::getAssociatedString(), PsNameServer::getCanonicalRepresentation(), PsName::getNameServer(), PsSimulatedObject::getObjectDescriptor(), PsObjectDescriptor::getSchedulingParameters(), PsMultipleConfigurationParameter::getSubDescriptorByName(), PsDate, and PsName::setNameServer().

00042                                                                                    : 
00043    PsController(initialObjects,
00044                 initialDate),
00045    _numberOfThreads (2)
00046 {
00047    //convert the actual name Server to non ref counting name server to avoid contention on the name server locks during ref counting operations
00048    PsNoRefCountingNameServer<STL_ALLOC> * nameServer = new PsNoRefCountingNameServer<STL_ALLOC> (PsName::getNameServer()->getCanonicalRepresentation () ) ;
00049    PsName::setNameServer (nameServer ) ;
00050 
00051    if (getObjectDescriptor().getSchedulingParameters() != NULL )
00052       {
00053          const PsConfigurationParameterDescriptor * param = getObjectDescriptor().getSchedulingParameters()->getSubDescriptorByName("NumberOfThreads") ;
00054          if (param != NULL )
00055             {
00056                _numberOfThreads = atoi (param->getAssociatedString().c_str() ) ; 
00057             }
00058       }
00059    
00060 }

PsMultiThreadedController::~PsMultiThreadedController   [virtual]
 

destructor

Definition at line 62 of file PsMultiThreadedController.cxx.

00062                                                       {
00063 
00064 }


Member Function Documentation

PsnScheduler * PsMultiThreadedController::createScheduler   [virtual]
 

redefine to create a multihtreaded scheduler

Reimplemented from PsController.

Definition at line 66 of file PsMultiThreadedController.cxx.

References PsController::_nbStepsByCycle, and _numberOfThreads.

00067 {
00068    return new PsnMultiThreadedScheduler( _nbStepsByCycle , _numberOfThreads, true ) ;
00069 }

void PsMultiThreadedController::run   [virtual]
 

redefine run to install a local memory manager

Reimplemented from PsController.

Definition at line 71 of file PsMultiThreadedController.cxx.

References PsnMemoryManager::allocateSizeRemembered(), HeapStackTop::getSystemMemoryManager(), PsController::init(), PsnMemoryManager::init(), and PsController::run().

00072 {
00073     PsnMemoryManager * currentMemoryManager = HeapStackTop::getSystemMemoryManager() ;
00074 
00075    assert ( currentMemoryManager != 0 ) ;
00076 
00077    size_t initialAllocatatedMemory = 1024 * 1024 ;
00078 
00079    void * startMemory = currentMemoryManager->allocateSizeRemembered ( initialAllocatatedMemory ) ;
00080 
00081    PsnDescriptorMemoryManager * descriptorMemoryManager = new PsnDescriptorMemoryManager ( *currentMemoryManager ) ;
00082 
00083    descriptorMemoryManager->init() ;
00084    
00085    PsnThreadMemoryManager * memoryManagerForThisThread ;
00086    
00087    memoryManagerForThisThread = new PsnThreadMemoryManager ( startMemory, 
00088                                                              initialAllocatatedMemory,
00089                                                              *currentMemoryManager,
00090                                                              *descriptorMemoryManager ) ;
00091    memoryManagerForThisThread -> init() ;
00092 
00093    HeapStackTop allocationContextForThisThread ( memoryManagerForThisThread ) ;
00094   
00095    PsController::run() ;
00096 }


Member Data Documentation

unsigned int PsMultiThreadedController::_numberOfThreads [protected]
 

the number of threads created

Definition at line 57 of file PsMultiThreadedController.h.

Referenced by createScheduler(), and PsMultiThreadedController().


The documentation for this class was generated from the following files:
logo OpenMask

Documentation generated on Mon Nov 25 15:26:13 2002

Generated with doxygen 1.2.12 by Dimitri van Heesch ,   1997-2001