cancellation_flag.h revision c7f5f8508d98d5952d42ed7648c2a8f30a4da156
1c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Copyright (c) 2009 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef BASE_CANCELLATION_FLAG_H_ 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define BASE_CANCELLATION_FLAG_H_ 7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/atomicops.h" 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/platform_thread.h" 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace base { 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// CancellationFlag allows one thread to cancel jobs executed on some worker 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// thread. Calling Set() from one thread and IsSet() from a number of threads 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// is thread-safe. 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// This class IS NOT intended for synchronization between threads. 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass CancellationFlag { 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public: 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott CancellationFlag() : flag_(false) { 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if !defined(NDEBUG) 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott set_on_ = PlatformThread::CurrentId(); 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ~CancellationFlag() {} 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Set the flag. May only be called on the thread which owns the object. 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void Set(); 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool IsSet() const; // Returns true iff the flag was set. 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott private: 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott base::subtle::Atomic32 flag_; 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if !defined(NDEBUG) 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott PlatformThreadId set_on_; 35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif 36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott DISALLOW_COPY_AND_ASSIGN(CancellationFlag); 38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace base 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // BASE_CANCELLATION_FLAG_H_ 43