#include <pthread.h>
#include <signal.h>
#include <errno.h>
+#include "include/atomic.h"
-extern int _num_threads; // hack: in config.cc
+extern atomic_t _num_threads; // hack: in config.cc
class Thread {
private:
private:
static void *_entry_func(void *arg) {
void *r = ((Thread*)arg)->entry();
- _num_threads--;
+ _num_threads.dec();
return r;
}
bool is_started() { return thread_id != 0; }
bool am_self() { return (pthread_self() == thread_id); }
- static int get_num_threads() { return _num_threads; }
+ static int get_num_threads() { return _num_threads.test(); }
int kill(int signal) {
if (thread_id)
return -EINVAL;
}
int create() {
- _num_threads++;
+ _num_threads.inc();
return pthread_create( &thread_id, NULL, _entry_func, (void*)this );
}
int join(void **prval = 0) {
unsigned long _page_mask = ~(unsigned long)(_page_size - 1);
unsigned _page_shift = _get_bits_of(_page_size);
-int _num_threads = 0;
+atomic_t _num_threads(0);
// file layouts
struct ceph_file_layout g_default_file_layout = {