From 0e78f62a6324a58de8a55aff13b490ffd2dd369f Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 22 Jul 2008 12:26:24 -0700 Subject: [PATCH] use atomic_t to count threads --- src/common/Thread.h | 9 +++++---- src/config.cc | 2 +- src/include/atomic.h | 1 + 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/common/Thread.h b/src/common/Thread.h index b8b75bb57eec3..24876f7f12427 100644 --- a/src/common/Thread.h +++ b/src/common/Thread.h @@ -19,8 +19,9 @@ #include #include #include +#include "include/atomic.h" -extern int _num_threads; // hack: in config.cc +extern atomic_t _num_threads; // hack: in config.cc class Thread { private: @@ -36,7 +37,7 @@ class Thread { private: static void *_entry_func(void *arg) { void *r = ((Thread*)arg)->entry(); - _num_threads--; + _num_threads.dec(); return r; } @@ -45,7 +46,7 @@ class Thread { 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) @@ -54,7 +55,7 @@ class Thread { return -EINVAL; } int create() { - _num_threads++; + _num_threads.inc(); return pthread_create( &thread_id, NULL, _entry_func, (void*)this ); } int join(void **prval = 0) { diff --git a/src/config.cc b/src/config.cc index 3369dde4656ad..121ee95f322b9 100644 --- a/src/config.cc +++ b/src/config.cc @@ -99,7 +99,7 @@ unsigned _page_size = sysconf(_SC_PAGESIZE); 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 = { diff --git a/src/include/atomic.h b/src/include/atomic.h index 31a095d8ea95e..0fc65b0898233 100644 --- a/src/include/atomic.h +++ b/src/include/atomic.h @@ -47,6 +47,7 @@ class atomic_t { long nref; public: atomic_t(int i=0) : lock(false), nref(i) {} + atomic_t(const atomic_t& other); void inc() { lock.Lock(); ++nref; -- 2.39.5