00001
00018 #ifndef THREADPOOL_SIZE_POLICIES_HPP_INCLUDED
00019 #define THREADPOOL_SIZE_POLICIES_HPP_INCLUDED
00020
00021
00022
00024 namespace boost { namespace threadpool
00025 {
00026
00031 template<typename Pool>
00032 struct empty_controller
00033 {
00034 empty_controller(typename Pool::size_policy_type&, shared_ptr<Pool>) {}
00035 };
00036
00037
00042 template< typename Pool >
00043 class resize_controller
00044 {
00045 typedef typename Pool::size_policy_type size_policy_type;
00046 reference_wrapper<size_policy_type> m_policy;
00047 shared_ptr<Pool> m_pool;
00048
00049 public:
00050 resize_controller(size_policy_type& policy, shared_ptr<Pool> pool)
00051 : m_policy(policy)
00052 , m_pool(pool)
00053 {
00054 }
00055
00056 bool resize(size_t worker_count)
00057 {
00058 return m_policy.get().resize(worker_count);
00059 }
00060 };
00061
00062
00067 template<typename Pool>
00068 class static_size
00069 {
00070 reference_wrapper<Pool volatile> m_pool;
00071
00072 public:
00073 static void init(Pool& pool, size_t const worker_count)
00074 {
00075 pool.resize(worker_count);
00076 }
00077
00078 static_size(Pool volatile & pool)
00079 : m_pool(pool)
00080 {}
00081
00082 bool resize(size_t const worker_count)
00083 {
00084 return m_pool.get().resize(worker_count);
00085 }
00086
00087 void worker_died_unexpectedly(size_t const new_worker_count)
00088 {
00089 m_pool.get().resize(new_worker_count + 1);
00090 }
00091
00092
00093 void task_scheduled() {}
00094 void task_finished() {}
00095 };
00096
00097 } }
00098
00099 #endif // THREADPOOL_SIZE_POLICIES_HPP_INCLUDED