### 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.

##### 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.
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.

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 `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`