14 #ifndef __INCLUDED_SCOPIRA_TOOL_THREAD_PTHREADS_H__ 15 #define __INCLUDED_SCOPIRA_TOOL_THREAD_PTHREADS_H__ 17 #include <scopira/tool/platform.h> 18 #include <scopira/tool/export.h> 23 #include <scopira/tool/object.h> 34 typedef void* (*runfunc_t)(
void*);
76 SCOPIRA_EXPORT
virtual void run(
void) = 0;
91 SCOPIRA_EXPORT
virtual void start(
void) = 0;
94 SCOPIRA_EXPORT
virtual void notify_stop(
void) = 0;
97 SCOPIRA_EXPORT
virtual void wait_stop(
void) = 0;
100 SCOPIRA_EXPORT
virtual bool is_running(
void)
const = 0;
112 typedef pthread_key_t tlskey_t;
117 void *dm_runfunc_arg;
118 volatile bool dm_running;
146 SCOPIRA_EXPORT thread(
runfunc_t func,
void *arg);
149 SCOPIRA_EXPORT
virtual ~thread();
152 SCOPIRA_EXPORT
virtual void run(
void);
155 SCOPIRA_EXPORT
virtual void start(
void);
158 SCOPIRA_EXPORT
virtual void notify_stop(
void);
160 SCOPIRA_EXPORT
virtual void wait_stop(
void);
162 SCOPIRA_EXPORT
virtual bool is_running(
void)
const {
return dm_running; }
170 SCOPIRA_EXPORT
static void sleep(
int msec);
181 SCOPIRA_EXPORT
static void open_tls(tlskey_t &outkey);
187 SCOPIRA_EXPORT
static void close_tls(tlskey_t k);
196 SCOPIRA_EXPORT
static void set_tls(tlskey_t k,
const void *val);
204 SCOPIRA_EXPORT
static void * get_tls(tlskey_t k);
207 SCOPIRA_EXPORT
static void * voidrun(
void *arg);
223 pthread_cond_t dm_con;
231 SCOPIRA_EXPORT ~condition();
238 SCOPIRA_EXPORT
void notify(
void);
244 SCOPIRA_EXPORT
void notify_all(
void);
253 SCOPIRA_EXPORT
void wait(
mutex &mut);
265 SCOPIRA_EXPORT
bool wait(
mutex &mut,
int msec);
276 pthread_rwlock_t dm_rw;
280 SCOPIRA_EXPORT
rwlock(
void);
282 SCOPIRA_EXPORT ~rwlock();
285 SCOPIRA_EXPORT
void write_lock(
void);
287 SCOPIRA_EXPORT
bool try_write_lock(
void);
289 SCOPIRA_EXPORT
void read_lock(
void);
291 SCOPIRA_EXPORT
bool try_read_lock(
void);
293 SCOPIRA_EXPORT
void unlock(
void);
403 area_ptr(
const volatile T& ref) : dm_ptr(const_cast<T*>(&ref)) { }
407 T*
get(void) {
return dm_ptr; }
419 void reset(
void) { dm_ptr =
const_cast<T*
>(
const_cast<volatile T*
>(dm_ptr)); }
460 const T*
get(void) {
return dm_ptr; }
472 void reset(
void) { dm_ptr =
const_cast<const T*
>(
const_cast<volatile T*
>(dm_ptr)); }
Definition: archiveflow.h:20