2 // Copyright (c) 2016 Intel Corporation
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://www.apache.org/licenses/LICENSE-2.0
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
17 #ifndef PUBLIC_SPINLOCK_H_
18 #define PUBLIC_SPINLOCK_H_
22 namespace hwcomposer {
27 while (atomic_lock_.test_and_set(std::memory_order_acquire)) {
32 atomic_lock_.clear(std::memory_order_release);
36 std::atomic_flag atomic_lock_ = ATOMIC_FLAG_INIT;
39 class ScopedSpinLock {
41 explicit ScopedSpinLock(SpinLock& lock) : lock_(lock) {
58 class ScopedSpinLocks {
60 ScopedSpinLocks(SpinLock& lock1, SpinLock& lock2)
61 : lock1_(lock1), lock2_(lock2) {
76 } // namespace hwcomposer
77 #endif // PUBLIC_SPINLOCK_H_