diff options
author | timurrrr@chromium.org <timurrrr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-16 13:09:11 +0000 |
---|---|---|
committer | timurrrr@chromium.org <timurrrr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-16 13:09:11 +0000 |
commit | 1c9cc40ac8ccaed63bda3770a16ed65ad2d0ee3c (patch) | |
tree | 6ea0cb0c3a08ddec22b8470d62ded7d97b2da921 /base/atomic_flag.cc | |
parent | 36b4f8050b8b5df172496236dccf5e9fa9814405 (diff) | |
download | chromium_src-1c9cc40ac8ccaed63bda3770a16ed65ad2d0ee3c.zip chromium_src-1c9cc40ac8ccaed63bda3770a16ed65ad2d0ee3c.tar.gz chromium_src-1c9cc40ac8ccaed63bda3770a16ed65ad2d0ee3c.tar.bz2 |
Add AtomicFlag class to base/...
This class is intended to replace wrong synchronization
via boolean like those in the bugs listed below.
TEST=./sconsbuild/Debug/base_unittests --gtest_filter="*AtomicFlag*"
BUG=21468,22520,24419
Review URL: http://codereview.chromium.org/276002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@29265 0039d316-1c4b-4281-b951-d872f2087c98
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 |