69 struct timespec& timeout);
83 if (pthread_join(tid, &u.p)) {
114 _max_active(max_active),
159 virtual void work() = 0;
180 return _randgen.
rand();
190 return _randgen.
rand(n);
206 template<
class Class,
class Functor>
229 template<
class Return,
class Class>
231 Return (Class::*mem_func)(),
232 const std::string& thread_name) {
233 typedef std::mem_fun_t<Return, Class> Functor;
249 #if 0 // superceded by thread_local.h 251 struct thread_local {
260 template<
class Destructor>
261 thread_local(Destructor d) {
262 pthread_key_create(&_key, d);
265 pthread_key_create(&_key,
nullptr);
268 pthread_key_delete(_key);
272 return reinterpret_cast<T*
>(pthread_getspecific(_key));
275 int result = pthread_setspecific(_key, val);
282 thread_local &operator=(
T* val) {
wraps up a class instance and a member function to look like a thread_t. Use the convenience function...
Definition: kits_thread.h:207
randgen_t _randgen
Definition: kits_thread.h:138
pthread_t thread_create(thread_t *t, thread_pool *p=nullptr)
Definition: kits_thread.cpp:168
bool _delete_me
Definition: kits_thread.h:150
void thread_cond_signal(pthread_cond_t &cond)
Definition: kits_thread.cpp:263
void thread_cond_destroy(pthread_cond_t &cond)
Definition: kits_thread.cpp:257
Definition: thread_wrapper.h:16
pthread_cond_t _cond
Definition: kits_thread.h:106
bool delete_me()
Definition: kits_thread.h:161
int rand()
Definition: randgen.h:40
Definition: kits_thread.h:134
pthread_mutex_t _lock
Definition: kits_thread.h:104
void thread_mutex_destroy(pthread_mutex_t &mutex)
Definition: kits_thread.cpp:243
virtual void work()
Definition: kits_thread.h:218
std::string thread_name()
Definition: kits_thread.h:165
T * thread_join(pthread_t tid)
Definition: kits_thread.h:75
void start()
Definition: kits_thread.cpp:359
std::string _thread_name
Definition: kits_thread.h:136
void stop()
Definition: kits_thread.cpp:375
void setuppool(thread_pool *apool)
Definition: kits_thread.h:143
void thread_cond_wait(pthread_cond_t &cond, pthread_mutex_t &mutex)
Definition: kits_thread.cpp:275
pthread_mutex_t thread_mutex_create(const pthread_mutexattr_t *attr=nullptr)
Definition: kits_thread.cpp:185
int rand()
Returns a pseudo-random integer between 0 and RAND_MAX.
Definition: kits_thread.h:179
Definition: kits_thread.h:103
#define __PRETTY_FUNCTION__
Definition: compat.h:34
#define THROW_IF(Exception, err)
Definition: kits_exception.h:63
void thread_init(void)
Initialize thread module.
Definition: kits_thread.cpp:142
Class * _instance
Definition: kits_thread.h:208
__thread thread_pool * THREAD_POOL
Definition: kits_thread.cpp:73
virtual ~thread_t()
Definition: kits_thread.h:193
int _active
Definition: kits_thread.h:109
void thread_cond_broadcast(pthread_cond_t &cond)
Definition: kits_thread.cpp:269
member_func_thread_t(Class *instance, Functor func, const std::string &thread_name)
Definition: kits_thread.h:213
void thread_mutex_lock(pthread_mutex_t &mutex)
Definition: kits_thread.cpp:216
pthread_cond_t thread_cond_create(const pthread_condattr_t *attr=nullptr)
Definition: kits_thread.cpp:249
thread_pool(int max_active)
Definition: kits_thread.h:111
thread_t * thread_get_self(void)
Definition: kits_thread.cpp:147
Definition: kits_exception.h:98
thread_t * member_func_thread(Class *instance, Return(Class::*mem_func)(), const std::string &thread_name)
Helper function for running class member functions in a pthread. The function must take no arguments ...
Definition: kits_thread.h:230
thread_pool * _ppool
Definition: kits_thread.h:141
randgen_t * randgen()
Returns pointer to thread_t's randgen_t object.
Definition: kits_thread.h:172
void thread_mutex_unlock(pthread_mutex_t &mutex)
Definition: kits_thread.cpp:237
#define T
Definition: w_okvl_inl.h:45
Functor _func
Definition: kits_thread.h:210
int _max_active
Definition: kits_thread.h:108
int rand(int n)
Definition: kits_thread.h:189