cancellation_flag.h revision 3f50c38dc070f4bb515c1b64450dae14f316474e
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_SYNCHRONIZATION_CANCELLATION_FLAG_H_
6#define BASE_SYNCHRONIZATION_CANCELLATION_FLAG_H_
7#pragma once
8
9#include "base/atomicops.h"
10#include "base/threading/platform_thread.h"
11
12namespace base {
13
14// CancellationFlag allows one thread to cancel jobs executed on some worker
15// thread. Calling Set() from one thread and IsSet() from a number of threads
16// is thread-safe.
17//
18// This class IS NOT intended for synchronization between threads.
19class CancellationFlag {
20 public:
21  CancellationFlag() : flag_(false) {
22#if !defined(NDEBUG)
23    set_on_ = PlatformThread::CurrentId();
24#endif
25  }
26  ~CancellationFlag() {}
27
28  // Set the flag. May only be called on the thread which owns the object.
29  void Set();
30  bool IsSet() const;  // Returns true iff the flag was set.
31
32 private:
33  base::subtle::Atomic32 flag_;
34#if !defined(NDEBUG)
35  PlatformThreadId set_on_;
36#endif
37
38  DISALLOW_COPY_AND_ASSIGN(CancellationFlag);
39};
40
41}  // namespace base
42
43#endif  // BASE_SYNCHRONIZATION_CANCELLATION_FLAG_H_
44