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