1*76559068SAndroid Build Coastguard Worker //===-- condition_variable.h ------------------------------------*- C++ -*-===// 2*76559068SAndroid Build Coastguard Worker // 3*76559068SAndroid Build Coastguard Worker // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*76559068SAndroid Build Coastguard Worker // See https://llvm.org/LICENSE.txt for license information. 5*76559068SAndroid Build Coastguard Worker // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*76559068SAndroid Build Coastguard Worker // 7*76559068SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 8*76559068SAndroid Build Coastguard Worker 9*76559068SAndroid Build Coastguard Worker #ifndef SCUDO_CONDITION_VARIABLE_H_ 10*76559068SAndroid Build Coastguard Worker #define SCUDO_CONDITION_VARIABLE_H_ 11*76559068SAndroid Build Coastguard Worker 12*76559068SAndroid Build Coastguard Worker #include "condition_variable_base.h" 13*76559068SAndroid Build Coastguard Worker 14*76559068SAndroid Build Coastguard Worker #include "common.h" 15*76559068SAndroid Build Coastguard Worker #include "platform.h" 16*76559068SAndroid Build Coastguard Worker 17*76559068SAndroid Build Coastguard Worker #include "condition_variable_linux.h" 18*76559068SAndroid Build Coastguard Worker 19*76559068SAndroid Build Coastguard Worker namespace scudo { 20*76559068SAndroid Build Coastguard Worker 21*76559068SAndroid Build Coastguard Worker // A default implementation of default condition variable. It doesn't do a real 22*76559068SAndroid Build Coastguard Worker // `wait`, instead it spins a short amount of time only. 23*76559068SAndroid Build Coastguard Worker class ConditionVariableDummy 24*76559068SAndroid Build Coastguard Worker : public ConditionVariableBase<ConditionVariableDummy> { 25*76559068SAndroid Build Coastguard Worker public: notifyAllImpl(UNUSED HybridMutex & M)26*76559068SAndroid Build Coastguard Worker void notifyAllImpl(UNUSED HybridMutex &M) REQUIRES(M) {} 27*76559068SAndroid Build Coastguard Worker waitImpl(UNUSED HybridMutex & M)28*76559068SAndroid Build Coastguard Worker void waitImpl(UNUSED HybridMutex &M) REQUIRES(M) { 29*76559068SAndroid Build Coastguard Worker M.unlock(); 30*76559068SAndroid Build Coastguard Worker 31*76559068SAndroid Build Coastguard Worker constexpr u32 SpinTimes = 64; 32*76559068SAndroid Build Coastguard Worker volatile u32 V = 0; 33*76559068SAndroid Build Coastguard Worker for (u32 I = 0; I < SpinTimes; ++I) { 34*76559068SAndroid Build Coastguard Worker u32 Tmp = V + 1; 35*76559068SAndroid Build Coastguard Worker V = Tmp; 36*76559068SAndroid Build Coastguard Worker } 37*76559068SAndroid Build Coastguard Worker 38*76559068SAndroid Build Coastguard Worker M.lock(); 39*76559068SAndroid Build Coastguard Worker } 40*76559068SAndroid Build Coastguard Worker }; 41*76559068SAndroid Build Coastguard Worker 42*76559068SAndroid Build Coastguard Worker } // namespace scudo 43*76559068SAndroid Build Coastguard Worker 44*76559068SAndroid Build Coastguard Worker #endif // SCUDO_CONDITION_VARIABLE_H_ 45