Home | History | Annotate | Download | only in core
      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 "SkSpinlock.h"
      9 
     10 #if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2
     11     #include <emmintrin.h>
     12     static void pause() { _mm_pause(); }
     13 #else
     14     static void pause() { /*spin*/ }
     15 #endif
     16 
     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