23 #ifndef _THREAD_MANAGER_HPP_ 24 #define _THREAD_MANAGER_HPP_ 26 #if !defined (SERVER_MODE) && !defined (SA_MODE) 28 #endif // not SERVER_MODE and not SA_MODE 58 template <
typename Context>
118 void alloc_entries (
void);
119 void init_entries (
bool with_lock_free =
false);
120 void init_lockfree_system ();
129 entry_workpool *create_worker_pool (std::size_t pool_size, std::size_t task_max_count,
const char *name,
131 bool debug_logging,
bool pool_threads =
false,
132 wait_seconds wait_for_task_time = std::chrono::seconds (5));
177 void destroy_daemon (
daemon *&daemon_arg);
183 const char *daemon_name);
184 void destroy_daemon_without_entry (
daemon *&daemon_arg);
194 void check_all_killed (
void);
200 return m_all_entries;
205 return *m_lf_tran_sys;
208 void set_max_thread_count_from_config ();
209 void set_max_thread_count (std::size_t
count);
219 template <
typename Func,
typename ... Args>
220 void map_entries (Func &&func, Args &&... args);
233 entry *claim_entry (
void);
234 void retire_entry (
entry &entry_p);
237 template <
typename Res,
typename ... CtArgs>
238 Res *create_and_track_resource (std::vector<Res *> &tracker,
size_t entries_count, CtArgs &&... args);
239 template <
typename Res>
240 void destroy_and_untrack_resource (std::vector<Res *> &tracker, Res *&res, std::size_t entries_count);
241 template <
typename Res>
242 void destroy_and_untrack_all_resources (std::vector<Res *> &tracker);
349 template <
typename Func,
typename ... Args>
351 manager::map_entries (Func &&func, Args &&... args)
354 for (std::size_t
i = 0;
i < m_max_threads;
i++)
356 func (m_all_entries[
i], stop, std::forward<Args> (args)...);
394 if (thread_p ==
NULL)
399 return thread_p->
index;
418 if (thread_p ==
NULL)
433 template <
typename Duration>
437 std::this_thread::sleep_for (d);
444 std::chrono::duration<double, std::milli> duration_millis (millisec);
448 #endif // _THREAD_MANAGER_HPP_ entry_dispatcher * m_entry_dispatcher
cubthread::entry * thread_get_thread_entry_info(void)
void thread_return_lock_free_transaction_entries(void)
lf_tran_entry * tran_entries[THREAD_TS_COUNT]
const int LOG_WORKER_POOL_ALL
std::vector< daemon * > m_daemons
const int LOG_WORKER_POOL_VACUUM
entry_manager * m_entry_manager
void thread_sleep(double millisec)
unsigned long int thread_id_t
void clear_thread_local_entry(void)
int thread_get_current_entry_index(void)
cubthread::manager * thread_get_manager(void)
void set_thread_local_entry(entry &tl_entry)
const int LOG_WORKER_POOL_CONNECTIONS
const int LOG_WORKER_POOL_TRAN_WORKERS
const int LOG_WORKER_POOL_INDEX_BUILDER
const int LOG_MANAGER_ALL
const int LOG_DAEMON_VACUUM
int thread_get_entry_index(cubthread::entry *thread_p)
bool is_single_thread(void)
manager * get_manager(void)
std::vector< entry_workpool * > m_worker_pools
lockfree::tran::system * m_lf_tran_sys
void thread_sleep_for(Duration d)
std::size_t m_max_threads
std::vector< daemon * > m_daemons_without_entries
void check_not_single_thread(void)
lf_tran_entry * thread_get_tran_entry(cubthread::entry *thread_p, int entry_idx)
int initialize_thread_entries(bool with_lock_free)
lockfree::tran::system & get_lockfree_transys()
void return_lock_free_transaction_entries(void)
std::size_t get_max_thread_count(void)
int count(int &result, const cub_regex_object ®, const std::string &src, const int position, const INTL_CODESET codeset)
std::mutex m_entries_mutex
void set_manager(manager *manager)
entry * get_main_entry(void)
std::size_t m_available_entries_count
std::size_t thread_num_total_threads(void)
daemon_entry_manager * m_daemon_entry_manager
entry * get_all_entries(void)
bool is_logging_configured(const int logging_flag)