]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
use atomic_t to count threads
authorSage Weil <sage@newdream.net>
Tue, 22 Jul 2008 19:26:24 +0000 (12:26 -0700)
committerSage Weil <sage@newdream.net>
Tue, 22 Jul 2008 19:26:24 +0000 (12:26 -0700)
src/common/Thread.h
src/config.cc
src/include/atomic.h

index b8b75bb57eec34f586e229ce3fd09b6054097430..24876f7f12427d46df737840b294abd0fd4b7653 100644 (file)
@@ -19,8 +19,9 @@
 #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:
@@ -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) {
index 3369dde4656add75735620902b4931a200c2b84c..121ee95f322b9eb7ef6d03b6ce2e4cc2f26b18e8 100644 (file)
@@ -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 = {
index 31a095d8ea95e2edadcfeb5481fe53da85bdfb35..0fc65b089823334f2d4611bb0d1c1c4856768dcf 100644 (file)
@@ -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;