[C++] Make kati stats thread safe
diff --git a/stats.cc b/stats.cc
index 49a0ef3..847c61a 100644
--- a/stats.cc
+++ b/stats.cc
@@ -26,31 +26,35 @@
 namespace {
 
 vector<Stats*>* g_stats;
+thread_local double g_start_time = 0.0;
 
 }  // namespace
 
 Stats::Stats(const char* name)
-    : name_(name), start_time_(0), elapsed_(0), cnt_(0) {
+    : name_(name), elapsed_(0), cnt_(0) {
   if (g_stats == NULL)
     g_stats = new vector<Stats*>;
   g_stats->push_back(this);
 }
 
 string Stats::String() const {
+  unique_lock<mutex> lock(mu_);
   return StringPrintf("%s: %f / %d", name_, elapsed_, cnt_);
 }
 
 void Stats::Start() {
-  CHECK(!start_time_);
+  CHECK(!g_start_time);
+  g_start_time = GetTime();
+  unique_lock<mutex> lock(mu_);
   cnt_++;
-  start_time_ = GetTime();
 }
 
 double Stats::End() {
-  CHECK(start_time_);
-  double e = GetTime() - start_time_;
+  CHECK(g_start_time);
+  double e = GetTime() - g_start_time;
+  g_start_time = 0;
+  unique_lock<mutex> lock(mu_);
   elapsed_ += e;
-  start_time_ = 0;
   return e;
 }
 
diff --git a/stats.h b/stats.h
index 7b259ae..63acc55 100644
--- a/stats.h
+++ b/stats.h
@@ -15,6 +15,7 @@
 #ifndef STATS_H_
 #define STATS_H_
 
+#include <mutex>
 #include <string>
 
 using namespace std;
@@ -32,9 +33,9 @@
   friend class ScopedStatsRecorder;
 
   const char* name_;
-  double start_time_;
   double elapsed_;
   int cnt_;
+  mutable mutex mu_;
 };
 
 class ScopedStatsRecorder {