• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef BASE_NON_THREAD_SAFE_H__
6 #define BASE_NON_THREAD_SAFE_H__
7 
8 #include "base/platform_thread.h"
9 
10 // A helper class used to help verify that methods of a class are
11 // called from the same thread.  One can inherit from this class and use
12 // CalledOnValidThread() to verify.
13 //
14 // This is intended to be used with classes that appear to be thread safe, but
15 // aren't.  For example, a service or a singleton like the preferences system.
16 //
17 // Example:
18 // class MyClass : public NonThreadSafe {
19 //  public:
20 //   void Foo() {
21 //     DCHECK(CalledOnValidThread());
22 //     ... (do stuff) ...
23 //   }
24 // }
25 //
26 // In Release mode, CalledOnValidThread will always return true.
27 //
28 #ifndef NDEBUG
29 class NonThreadSafe {
30  public:
31   NonThreadSafe();
32   ~NonThreadSafe();
33 
34   bool CalledOnValidThread() const;
35 
36  private:
37   PlatformThreadId valid_thread_id_;
38 };
39 #else
40 // Do nothing in release mode.
41 class NonThreadSafe {
42  public:
NonThreadSafe()43   NonThreadSafe() {}
~NonThreadSafe()44   ~NonThreadSafe() {}
45 
CalledOnValidThread()46   bool CalledOnValidThread() const {
47     return true;
48   }
49 };
50 #endif  // NDEBUG
51 
52 #endif  // BASE_NON_THREAD_SAFE_H__
53