9#ifndef INCLUDED_BDLMT_MULTIQUEUETHREADPOOL
10#define INCLUDED_BDLMT_MULTIQUEUETHREADPOOL
398#include <bdlscm_version.h>
422#include <bsl_deque.h>
423#include <bsl_functional.h>
429class MultiQueueThreadPool;
449 e_ENQUEUING_DISABLED,
461 MultiQueueThreadPool *d_multiQueueThreadPool_p;
468 EnqueueState d_enqueueState;
493 MultiQueueThreadPool_Queue();
494 MultiQueueThreadPool_Queue(
const MultiQueueThreadPool_Queue&);
495 MultiQueueThreadPool_Queue &operator=(
const MultiQueueThreadPool_Queue &);
673 static const char s_defaultThreadName[16];
682 bool d_threadPoolIsOwned;
888 int *numDeleted = 0);
983 int *numDeleted = 0)
const;
1012 return 0 == d_list.
size() && ( e_NOT_SCHEDULED == d_runState
1013 || e_PAUSED == d_runState);
1021 return e_ENQUEUING_ENABLED == d_enqueueState;
1029 return e_PAUSED == d_runState;
1037 return static_cast<int>(d_list.
size());
1046int MultiQueueThreadPool::findIfUsable(
int id,
1049 if ( e_STATE_RUNNING != d_state
1050 || 0 == d_threadPool_p->
enabled()) {
1056 if (d_queueRegistry.
end() == iter) {
1060 *queue = iter->second;
1069 Job temp(bsl::allocator_arg, d_allocator_p, functor);
1081 if (findIfUsable(
id, &queue)) {
1096 Job temp(bsl::allocator_arg, d_allocator_p, functor);
1108 if (findIfUsable(
id, &queue)) {
1129 *numExecuted = d_numExecuted.
swap(0);
1131 *numDeleted = d_numDeleted.
swap(0);
1136 *numEnqueued = d_numEnqueued.
swap(0);
1148 if (findIfUsable(
id, &queue)) {
1165 if (d_queueRegistry.
end() != iter) {
1166 return iter->second->batchSize();
1179 if (d_queueRegistry.
end() != iter) {
1180 return iter->second->isEnabled();
1193 if (d_queueRegistry.
end() != iter) {
1194 return iter->second->isPaused();
1205 return -(d_numExecuted + d_numDeleted) + d_numEnqueued;
1215 if (d_queueRegistry.
end() != iter) {
1216 return iter->second->length();
1225 int *numDeleted)
const
1230 *numExecuted = d_numExecuted;
1232 *numDeleted = d_numDeleted;
1234 *numEnqueued = d_numEnqueued;
1242 return static_cast<int>(d_queueRegistry.
size());
1248 return *d_threadPool_p;
Definition bdlcc_objectpool.h:446
Definition bdlcc_objectpool.h:694
Definition bdlmt_multiqueuethreadpool.h:438
bool isPaused() const
Report whether this object is paused.
Definition bdlmt_multiqueuethreadpool.h:1025
BSLMF_NESTED_TRAIT_DECLARATION(MultiQueueThreadPool_Queue, bslma::UsesBslmaAllocator)
bool isDrained() const
Report whether all jobs in this queue are finished.
Definition bdlmt_multiqueuethreadpool.h:1008
bsl::function< void()> Job
Definition bdlmt_multiqueuethreadpool.h:442
~MultiQueueThreadPool_Queue()
Destroy this queue.
int batchSize() const
Definition bdlmt_multiqueuethreadpool.h:1000
int pushBack(bslmf::MovableRef< Job > functor)
void setBatchSize(int batchSize)
bool enqueueDeletion(const Job &cleanupFunctor=Job(), bslmt::Latch *completionSignal=0)
MultiQueueThreadPool_Queue(MultiQueueThreadPool *multiQueueThreadPool, bslma::Allocator *basicAllocator=0)
bool isEnabled() const
Definition bdlmt_multiqueuethreadpool.h:1017
int pushFront(bslmf::MovableRef< Job > functor)
void drainWaitWhilePausing()
Block until all threads waiting for this queue to pause are released.
int length() const
Return an instantaneous snapshot of the length of this queue.
Definition bdlmt_multiqueuethreadpool.h:1033
Definition bdlmt_multiqueuethreadpool.h:652
MultiQueueThreadPool(const bslmt::ThreadAttributes &threadAttributes, int minThreads, int maxThreads, int maxIdleTime, bslma::Allocator *basicAllocator=0)
bsl::function< void()> Job
Definition bdlmt_multiqueuethreadpool.h:667
bool isPaused(int id) const
Definition bdlmt_multiqueuethreadpool.h:1187
int numElements() const
Definition bdlmt_multiqueuethreadpool.h:1201
int enqueueJob(int id, const Job &functor)
Definition bdlmt_multiqueuethreadpool.h:1094
void numProcessedReset(int *numExecuted, int *numEnqueued, int *numDeleted=0)
Definition bdlmt_multiqueuethreadpool.h:1121
int setBatchSize(int id, int batchSize)
Definition bdlmt_multiqueuethreadpool.h:1140
const ThreadPool & threadPool() const
Definition bdlmt_multiqueuethreadpool.h:1246
int batchSize(int id) const
Definition bdlmt_multiqueuethreadpool.h:1159
int addJobAtFront(int id, const Job &functor)
Definition bdlmt_multiqueuethreadpool.h:1067
void numProcessed(int *numExecuted, int *numEnqueued, int *numDeleted=0) const
Definition bdlmt_multiqueuethreadpool.h:1223
int deleteQueue(int id, const CleanupFunctor &cleanupFunctor)
bool isEnabled(int id) const
Definition bdlmt_multiqueuethreadpool.h:1173
friend class MultiQueueThreadPool_Queue
Definition bdlmt_multiqueuethreadpool.h:655
int numQueues() const
Definition bdlmt_multiqueuethreadpool.h:1238
BSLMF_NESTED_TRAIT_DECLARATION(MultiQueueThreadPool, bslma::UsesBslmaAllocator)
bsl::map< int, MultiQueueThreadPool_Queue * > QueueRegistry
Definition bdlmt_multiqueuethreadpool.h:669
MultiQueueThreadPool(ThreadPool *threadPool, bslma::Allocator *basicAllocator=0)
bsl::function< void()> CleanupFunctor
Definition bdlmt_multiqueuethreadpool.h:668
Definition bdlmt_threadpool.h:461
int enabled() const
Return the state (enabled or not) of the thread pool.
Definition bdlmt_threadpool.h:798
size_type size() const BSLS_KEYWORD_NOEXCEPT
Return the number of elements contained by this deque.
Definition bslstl_deque.h:2241
Definition bslstl_deque.h:814
Forward declaration.
Definition bslstl_function.h:946
Definition bslstl_map.h:653
BloombergLP::bslstl::TreeIterator< const value_type, Node, difference_type > const_iterator
Definition bslstl_map.h:758
iterator end() BSLS_KEYWORD_NOEXCEPT
Definition bslstl_map.h:3308
iterator find(const key_type &key)
Definition bslstl_map.h:1885
size_type size() const BSLS_KEYWORD_NOEXCEPT
Return the number of elements in this map.
Definition bslstl_map.h:4039
BloombergLP::bslstl::TreeIterator< value_type, Node, difference_type > iterator
Definition bslstl_map.h:756
Definition bslstl_vector.h:1120
Definition bslma_allocator.h:545
Definition bslmf_movableref.h:752
Definition bslmt_condition.h:220
Definition bslmt_latch.h:349
Definition bslmt_lockguard.h:234
Definition bslmt_mutex.h:317
Definition bslmt_readlockguard.h:287
Definition bslmt_readerwritermutex.h:244
Definition bslmt_threadattributes.h:361
Definition bslmt_writelockguard.h:221
Definition bsls_atomic.h:744
int swap(int swapValue)
Definition bsls_atomic.h:1711
#define BSLS_ASSERT_SAFE(X)
Definition bsls_assert.h:1917
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bdlmt_eventscheduler.h:550
bsl::function< void(void *, bslma::Allocator *)> DefaultCreator
Definition bdlcc_objectpool.h:421
Definition bslma_usesbslmaallocator.h:344
static MovableRef< t_TYPE > move(t_TYPE &reference) BSLS_KEYWORD_NOEXCEPT
Definition bslmf_movableref.h:1067
Imp::Handle Handle
Definition bslmt_threadutil.h:389