non_thread_safe.h revision ddb351dbec246cf1fab5ec20d2d5520909041de1
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_NON_THREAD_SAFE_H_ 6#define BASE_THREADING_NON_THREAD_SAFE_H_ 7#pragma once 8 9#ifndef NDEBUG 10#include "base/threading/non_thread_safe_impl.h" 11#endif 12 13namespace base { 14 15// Do nothing implementation of NonThreadSafe, for release mode. 16// 17// Note: You should almost always use the NonThreadSafe class to get 18// the right version of the class for your build configuration. 19class NonThreadSafeDoNothing { 20 public: 21 bool CalledOnValidThread() const { 22 return true; 23 } 24 25 protected: 26 void DetachFromThread() {} 27}; 28 29// NonThreadSafe is a helper class used to help verify that methods of a 30// class are called from the same thread. One can inherit from this class 31// and use CalledOnValidThread() to verify. 32// 33// This is intended to be used with classes that appear to be thread safe, but 34// aren't. For example, a service or a singleton like the preferences system. 35// 36// Example: 37// class MyClass : public base::NonThreadSafe { 38// public: 39// void Foo() { 40// DCHECK(CalledOnValidThread()); 41// ... (do stuff) ... 42// } 43// } 44// 45// In Release mode, CalledOnValidThread will always return true. 46// 47#ifndef NDEBUG 48class NonThreadSafe : public NonThreadSafeImpl { 49}; 50#else 51class NonThreadSafe : public NonThreadSafeDoNothing { 52}; 53#endif // NDEBUG 54 55} // namespace base 56 57#endif // BASE_NON_THREAD_SAFE_H_ 58