### thread_pool

A simple fixed-size thread pool.

    class thread_pool :
      public execution_context

##### Types

Name | Description
--- | ---
basic_executor_type | Executor implementation type used to submit functions to a thread pool.
executor_type | Executor used to submit functions to a thread pool.
fork_event | Fork-related event notifications.
scheduler_type | Scheduler used to schedule receivers on a thread pool.

##### Member Functions

Name | Description
--- | ---
attach | Attaches the current thread to the pool.
executor | Obtains the executor associated with the pool.
get_executor | Obtains the executor associated with the pool.
join | Joins the threads.
notify_fork | Notify the execution_context of a fork-related event.
scheduler | Obtains the scheduler associated with the pool.
stop | Stops the threads.
thread_pool [constructor] | Constructs a pool with an automatically determined number of threads. — Constructs a pool with a specified number of threads.
wait | Waits for threads to complete.
~thread_pool [destructor] | Destructor.

##### Protected Member Functions

Name | Description
--- | ---
destroy | Destroys all services in the context.
shutdown | Shuts down all services in the context.

##### Friends

Name | Description
--- | ---
add_service | (Deprecated: Use make_service().) Add a service object to the execution_context.
has_service | Determine if an execution_context contains a specified service type.
make_service | Creates a service object and adds it to the execution_context.
use_service | Obtain the service object corresponding to the given type.

The thread pool class is an execution context where functions are permitted to run on one of a fixed number of threads.

##### Submitting tasks to the pool

To submit functions to the thread pool, use the `dispatch` , `post` or `defer` free functions.

For example:

    void my_task()
    {
      ...
    }

    ...

    // Launch the pool with four threads.
    asio::thread_pool pool(4);

    // Submit a function to the pool.
    asio::post(pool, my_task);

    // Submit a lambda object to the pool.
    asio::post(pool,
        []()
        {
          ...
        });

    // Wait for all tasks in the pool to complete.
    pool.join();

##### Requirements

Header: `asio/thread_pool.hpp`

Convenience header: `asio.hpp`