Chromium Code Reviews| Index: base/synchronization/atomic_flag.h |
| diff --git a/base/synchronization/cancellation_flag.h b/base/synchronization/atomic_flag.h |
| similarity index 30% |
| copy from base/synchronization/cancellation_flag.h |
| copy to base/synchronization/atomic_flag.h |
| index f2f83f47dadd651542ad3f65f8101b77a86fc8eb..c754e8729c87769098ba1c54ef6447a340555a05 100644 |
| --- a/base/synchronization/cancellation_flag.h |
| +++ b/base/synchronization/atomic_flag.h |
| @@ -2,48 +2,41 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| -#ifndef BASE_SYNCHRONIZATION_CANCELLATION_FLAG_H_ |
| -#define BASE_SYNCHRONIZATION_CANCELLATION_FLAG_H_ |
| +#ifndef BASE_SYNCHRONIZATION_ATOMIC_FLAG_H_ |
| +#define BASE_SYNCHRONIZATION_ATOMIC_FLAG_H_ |
| #include "base/atomicops.h" |
| #include "base/base_export.h" |
| #include "base/macros.h" |
| -#include "base/threading/platform_thread.h" |
| +#include "base/threading/thread_checker.h" |
| namespace base { |
| -// CancellationFlag allows one thread to cancel jobs executed on some worker |
| -// thread. Calling Set() from one thread and IsSet() from a number of threads |
| -// is thread-safe. |
| +// A flag that can safely be set from one thread and read from other threads. |
| // |
| // This class IS NOT intended for synchronization between threads. |
| -class BASE_EXPORT CancellationFlag { |
| +class BASE_EXPORT AtomicFlag { |
| public: |
| - CancellationFlag() : flag_(false) { |
| -#if !defined(NDEBUG) |
| - set_on_ = PlatformThread::CurrentId(); |
| -#endif |
| - } |
| - ~CancellationFlag() {} |
| - |
| - // Set the flag. May only be called on the thread which owns the object. |
| + AtomicFlag(); |
| + ~AtomicFlag() = default; |
| + |
| + // Set the flag. May only be called on the thread which created the object. |
| void Set(); |
| - bool IsSet() const; // Returns true iff the flag was set. |
| - // For subtle reasons that may be different on different architectures, |
| - // a different thread testing IsSet() may erroneously read 'true' after |
| - // this method has been called. |
| + // Returns true iff the flag was set. |
| + bool IsSet() const; |
| + |
| + // Resets the flag. Be careful when using this: callers might not expect |
|
danakj
2016/07/21 19:21:42
Thanks this is a great comment.
|
| + // IsSet() to return false after returning true once. |
| void UnsafeResetForTesting(); |
| private: |
| - base::subtle::Atomic32 flag_; |
| -#if !defined(NDEBUG) |
| - PlatformThreadId set_on_; |
| -#endif |
| + base::subtle::Atomic32 flag_ = 0; |
| + ThreadChecker thread_checker_; |
| - DISALLOW_COPY_AND_ASSIGN(CancellationFlag); |
| + DISALLOW_COPY_AND_ASSIGN(AtomicFlag); |
| }; |
| } // namespace base |
| -#endif // BASE_SYNCHRONIZATION_CANCELLATION_FLAG_H_ |
| +#endif // BASE_SYNCHRONIZATION_ATOMIC_FLAG_H_ |