diff options
Diffstat (limited to 'base/atomic_flag.cc')
-rw-r--r-- | base/atomic_flag.cc | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/base/atomic_flag.cc b/base/atomic_flag.cc new file mode 100644 index 0000000..3e02543 --- /dev/null +++ b/base/atomic_flag.cc @@ -0,0 +1,28 @@ +// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/atomic_flag.h" + +#include "base/dynamic_annotations.h" +#include "base/logging.h" + +namespace base { + +void AtomicFlag::Set() { + DCHECK(!flag_); + // Set() method can't be called if the flag has already been set. + + ANNOTATE_HAPPENS_BEFORE(&flag_); + base::subtle::Release_Store(&flag_, 1); +} + +bool AtomicFlag::IsSet() const { + bool ret = base::subtle::Acquire_Load(&flag_) != 0; + if (ret) { + ANNOTATE_HAPPENS_AFTER(&flag_); + } + return ret; +} + +} // namespace base |