/* | |
* Copyright 2015 Google Inc. | |
* | |
* Use of this source code is governed by a BSD-style license that can be | |
* found in the LICENSE file. | |
*/ | |
#include "SkSpinlock.h" | |
#if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2 | |
#include <emmintrin.h> | |
static void pause() { _mm_pause(); } | |
#else | |
static void pause() { /*spin*/ } | |
#endif | |
void SkSpinlock::contendedAcquire() { | |
// To act as a mutex, we need an acquire barrier when we acquire the lock. | |
while (fLocked.exchange(true, std::memory_order_acquire)) { | |
pause(); | |
} | |
} |