• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2015 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include "include/private/SkSpinlock.h"
9 
10 #if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2
11     #include <emmintrin.h>
pause()12     static void pause() { _mm_pause(); }
13 #else
pause()14     static void pause() { /*spin*/ }
15 #endif
16 
contendedAcquire()17 void SkSpinlock::contendedAcquire() {
18     // To act as a mutex, we need an acquire barrier when we acquire the lock.
19     while (fLocked.exchange(true, std::memory_order_acquire)) {
20         pause();
21     }
22 }
23