1*6777b538SAndroid Build Coastguard Worker // Copyright 2011 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "base/synchronization/atomic_flag.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include "base/check_op.h" 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Worker namespace base { 10*6777b538SAndroid Build Coastguard Worker AtomicFlag()11*6777b538SAndroid Build Coastguard WorkerAtomicFlag::AtomicFlag() { 12*6777b538SAndroid Build Coastguard Worker // It doesn't matter where the AtomicFlag is built so long as it's always 13*6777b538SAndroid Build Coastguard Worker // Set() from the same sequence after. Note: the sequencing requirements are 14*6777b538SAndroid Build Coastguard Worker // necessary for IsSet()'s callers to know which sequence's memory operations 15*6777b538SAndroid Build Coastguard Worker // they are synchronized with. 16*6777b538SAndroid Build Coastguard Worker DETACH_FROM_SEQUENCE(set_sequence_checker_); 17*6777b538SAndroid Build Coastguard Worker } 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker AtomicFlag::~AtomicFlag() = default; 20*6777b538SAndroid Build Coastguard Worker Set()21*6777b538SAndroid Build Coastguard Workervoid AtomicFlag::Set() { 22*6777b538SAndroid Build Coastguard Worker DCHECK_CALLED_ON_VALID_SEQUENCE(set_sequence_checker_); 23*6777b538SAndroid Build Coastguard Worker flag_.store(1, std::memory_order_release); 24*6777b538SAndroid Build Coastguard Worker } 25*6777b538SAndroid Build Coastguard Worker UnsafeResetForTesting()26*6777b538SAndroid Build Coastguard Workervoid AtomicFlag::UnsafeResetForTesting() { 27*6777b538SAndroid Build Coastguard Worker DETACH_FROM_SEQUENCE(set_sequence_checker_); 28*6777b538SAndroid Build Coastguard Worker flag_.store(0, std::memory_order_release); 29*6777b538SAndroid Build Coastguard Worker } 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Worker } // namespace base 32