Home | History | Annotate | Download | only in threading
      1 // Copyright (c) 2011 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_THREADING_THREAD_CHECKER_IMPL_H_
      6 #define BASE_THREADING_THREAD_CHECKER_IMPL_H_
      7 
      8 #include "base/base_export.h"
      9 #include "base/synchronization/lock.h"
     10 #include "base/threading/platform_thread.h"
     11 
     12 namespace base {
     13 
     14 // Real implementation of ThreadChecker, for use in debug mode, or
     15 // for temporary use in release mode (e.g. to CHECK on a threading issue
     16 // seen only in the wild).
     17 //
     18 // Note: You should almost always use the ThreadChecker class to get the
     19 // right version for your build configuration.
     20 class BASE_EXPORT ThreadCheckerImpl {
     21  public:
     22   ThreadCheckerImpl();
     23   ~ThreadCheckerImpl();
     24 
     25   bool CalledOnValidThread() const;
     26 
     27   // Changes the thread that is checked for in CalledOnValidThread.  This may
     28   // be useful when an object may be created on one thread and then used
     29   // exclusively on another thread.
     30   void DetachFromThread();
     31 
     32  private:
     33   void EnsureThreadIdAssigned() const;
     34 
     35   mutable base::Lock lock_;
     36   // This is mutable so that CalledOnValidThread can set it.
     37   // It's guarded by |lock_|.
     38   mutable PlatformThreadId valid_thread_id_;
     39 };
     40 
     41 }  // namespace base
     42 
     43 #endif  // BASE_THREADING_THREAD_CHECKER_IMPL_H_
     44