[#BloombergLP-bdlmt-ThreadMultiplexor] = xref:BloombergLP.adoc[BloombergLP]::xref:BloombergLP/bdlmt.adoc[bdlmt]::ThreadMultiplexor :relfileprefix: ../../ :mrdocs: This class provides a mechanism for facilitating the use of multiple threads to perform various user‐defined functions ("jobs") when some degree of collaboration between threads is required. The thread multiplexor is configured with a total number of "processors", representing the number of threads that may process jobs at any particular time. Additional threads enqueue jobs to a pending job queue, which is processed by the next available processing thread. == Synopsis Declared in `<bdlmt_threadmultiplexor.h>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class ThreadMultiplexor; ---- == Type Aliases [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bdlmt/ThreadMultiplexor/Job.adoc[`Job`] | A callback of this type may be passed to the `processJob` method. |=== == Member Functions [cols="1,4"] |=== | Name| Description | xref:BloombergLP/bdlmt/ThreadMultiplexor/2constructor.adoc[`ThreadMultiplexor`] [.small]#[constructor]# | Create a thread multiplexor which uses, at most, the specified `maxProcessors` number of threads to process user‐specified jobs, identified as callbacks of type `Job`. Jobs that cannot be processed immediately are placed on a queue having the specified `maxQueueSize` to be processed by the next free thread. Optionally specify a `basicAllocator` used to supply memory. If `basicAllocator` is 0, the currently installed default allocator is used. The behavior is undefined unless `0 < maxProcessors` and `0 < maxQueueSize`. | xref:BloombergLP/bdlmt/ThreadMultiplexor/2destructor.adoc[`~ThreadMultiplexor`] [.small]#[destructor]# | Destroy this thread multiplexor object. | xref:BloombergLP/bdlmt/ThreadMultiplexor/maxProcessors.adoc[`maxProcessors`] | Return the maximum number of active processors. | xref:BloombergLP/bdlmt/ThreadMultiplexor/numProcessors.adoc[`numProcessors`] | Return the current number of active processors. | xref:BloombergLP/bdlmt/ThreadMultiplexor/processJob.adoc[`processJob`] | Process the specified `job` functor in the calling thread if the current number of processors is less than the maximum number of processors. Otherwise, enqueue `job` to the pending job queue. Return 0 on success, and a non‐zero value otherwise. Note that the only requirements on `t_JOBTYPE` are that it defines `operator()`, having a `void` return type, and that it defines a copy constructor. | xref:BloombergLP/bdlmt/ThreadMultiplexor/2conversion.adoc[`operator BloombergLP::bslmf::NestedTraitDeclaration<ThreadMultiplexor, UsesBslmaAllocator>`] | Declare that this type uses a `bslma` allocator. |=== [.small]#Created with https://www.mrdocs.com[MrDocs]#