boost::asio::thread_pool
A simple fixed‐size thread pool.
Synopsis
Declared in <boost/asio/thread_pool.hpp>
class thread_pool
: public execution_context
Types
Name |
Description |
Executor implementation type used to submit functions to a thread pool. |
|
Class used to uniquely identify a service. |
|
Base class for all execution context services. |
|
Base class for all execution context service makers. |
|
Executor used to submit functions to a thread pool. |
Member Functions
Name |
Description |
|
Constructors |
|
Destructor. |
Attaches the current thread to the pool. |
|
Obtains the executor associated with the pool. |
|
Obtains the executor associated with the pool. |
|
Joins the threads. |
|
Notify the execution_context of a fork‐related event. |
|
Stops the threads. |
|
Waits for threads to complete. |
Friends
Name |
Description |
|
Executor implementation type used to submit functions to a thread pool. |
Non-Member Functions
Name |
Description |
(Deprecated: Use make_service().) Add a service object to the execution_context. |
|
Determine if an execution_context contains a specified service type. |
|
Creates a service object and adds it to the execution_context. |
|
Obtain the service object corresponding to the given type. |
Description
The thread pool class is an execution context where functions are permitted to run on one of a fixed number of threads.
Thread Safety
Distinct objects: Safe. Shared objects: Safe, with the specific exceptions of the join() wait() and notify_fork() functions. The join() and wait() functions must not be called at the same time as other calls to join() or wait() on the same pool. The notify_fork() function should not be called while any thread_pool function, or any function on an I/O object that is associated with the thread_pool, is being called in another thread. (In effect, this means that notify_fork() is safe only on a thread pool that has no internal or attached threads at the time.)
Submitting tasks to the pool
To submit functions to the thread pool, use the boost::asio::dispatch, boost::asio::post or boost::asio::defer free functions.
For example:
void my_task()
{
...
}
...
// Launch the pool with four threads.
boost::asio::thread_pool pool(4);
// Submit a function to the pool.
boost::asio::post(pool, my_task);
// Submit a lambda object to the pool.
boost::asio::post(pool,
[]()
{
...
});
// Wait for all tasks in the pool to complete.
pool.join();
Created with MrDocs