(file) Return to ThreadPool.h CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

Diff for /pegasus/src/Pegasus/Common/ThreadPool.h between version 1.1 and 1.1.2.1

version 1.1, 2006/07/29 15:54:07 version 1.1.2.1, 2006/07/29 15:54:07
Line 0 
Line 1 
   //%2006////////////////////////////////////////////////////////////////////////
   //
   // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
   // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
   // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
   // IBM Corp.; EMC Corporation, The Open Group.
   // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
   // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
   // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
   // EMC Corporation; VERITAS Software Corporation; The Open Group.
   // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
   // EMC Corporation; Symantec Corporation; The Open Group.
   //
   // Permission is hereby granted, free of charge, to any person obtaining a copy
   // of this software and associated documentation files (the "Software"), to
   // deal in the Software without restriction, including without limitation the
   // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
   // sell copies of the Software, and to permit persons to whom the Software is
   // furnished to do so, subject to the following conditions:
   //
   // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
   // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
   // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
   // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
   // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
   // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
   // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
   // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   //
   //==============================================================================
   //
   // Author: Mike Day (mdday@us.ibm.com)
   //
   // Modified By: Markus Mueller
   //              Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
   //              Amit K Arora, IBM (amita@in.ibm.com) for PEP#101
   //              David Dillard, VERITAS Software Corp.
   //                  (david.dillard@veritas.com)
   //              Sean Keenan, Hewlett-Packard Company (sean.keenan@hp.com)
   //              Josephine Eskaline Joyce, IBM (jojustin@in.ibm.com) for Bug#2393
   //
   //%/////////////////////////////////////////////////////////////////////////////
   
   #ifndef Pegasus_ThreadPool_h
   #define Pegasus_ThreadPool_h
   
   #include <Pegasus/Common/Config.h>
   #include <Pegasus/Common/Linkage.h>
   #include <Pegasus/Common/Thread.h>
   
   PEGASUS_NAMESPACE_BEGIN
   
   class PEGASUS_COMMON_LINKAGE ThreadPool
   {
   public:
   
       /**
           Constructs a new ThreadPool object.
           @param initialSize The number of threads that are initially added to
               the thread pool.
           @param key A name for this thread pool that can be used to determine
               equality of two thread pool objects.  Only the first 16 characters
               of this value are used.
           @param minThreads The minimum number of threads that should be
               contained in this thread pool at any given time.
           @param maxThreads The maximum number of threads that should be
               contained in this thread pool at any given time.
           @param deallocateWait The minimum time that a thread should be idle
               before it is removed from the pool and cleaned up.
        */
       ThreadPool(Sint16 initialSize,
                  const char *key,
                  Sint16 minThreads,
                  Sint16 maxThreads, struct timeval &deallocateWait);
   
       /**
           Destructs the ThreadPool object.
        */
        ~ThreadPool();
   
       /**
           Allocate and start a thread to do a unit of work.
           @param parm A generic parameter to pass to the thread
           @param work A pointer to the function that is to be executed by
                       the thread
           @param blocking A pointer to an optional semaphore which, if
                           specified, is signaled after the thread finishes
                           executing the work function
           @return PEGASUS_THREAD_OK if the thread is started successfully,
                   PEGASUS_THREAD_INSUFFICIENT_RESOURCES  if the
                   resources necessary to start the thread are not currently
                   available.  PEGASUS_THREAD_SETUP_FAILURE if the thread
                   could not be setup properly. PEGASUS_THREAD_UNAVAILABLE
                   if this service is shutting down and no more threads can
                   be allocated.
           @exception IPCException
        */
       ThreadStatus allocate_and_awaken(void *parm,
                                        ThreadReturnType(PEGASUS_THREAD_CDECL *
                                                         work) (void *),
                                        Semaphore * blocking = 0);
   
       /**
           Cleans up idle threads if they have been running longer than the
           deallocate_wait configuration and more than the configured
           minimum number of threads is running.
           @return The number of threads that were cleaned up.
           @exception IPCException
        */
       Uint32 cleanupIdleThreads();
   
       void get_key(Sint8 * buf, int bufsize);
   
       inline void setMinThreads(Sint16 min)
       {
           _minThreads = min;
       }
   
       inline Sint16 getMinThreads() const
       {
           return _minThreads;
       }
   
       inline void setMaxThreads(Sint16 max)
       {
           _maxThreads = max;
       }
   
       inline Sint16 getMaxThreads() const
       {
           return _maxThreads;
       }
   
       inline Uint32 runningCount()
       {
           return _runningThreads.size();
       }
   
       inline Uint32 idleCount()
       {
           return _idleThreads.size();
       }
   
   private:
   
       ThreadPool();               // Unimplemented
       ThreadPool(const ThreadPool &);     // Unimplemented
       ThreadPool & operator=(const ThreadPool &); // Unimplemented
   
       static ThreadReturnType PEGASUS_THREAD_CDECL _loop(void *);
   
       static Boolean _timeIntervalExpired(struct timeval *start,
                                           struct timeval *interval);
   
       static void _deleteSemaphore(void *p);
   
       void _cleanupThread(Thread * thread);
       Thread *_initializeThread();
       void _addToIdleThreadsQueue(Thread * th);
   
       Sint16 _maxThreads;
       Sint16 _minThreads;
       AtomicInt _currentThreads;
       struct timeval _deallocateWait;
       char _key[17];
       List < Thread, Mutex > _idleThreads;
       List < Thread, Mutex > _runningThreads;
       AtomicInt _dying;
   };
   
   PEGASUS_NAMESPACE_END
   
   #endif // Pegasus_ThreadPool_h


Legend:
Removed from v.1.1  
changed lines
  Added in v.1.1.2.1

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2