1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "ppapi/utility/threading/lock.h" 6 7 namespace pp { 8 9 #ifdef WIN32 // Windows implementation for native plugins. 10 Lock()11Lock::Lock() { 12 // The second parameter is the spin count; for short-held locks it avoids the 13 // contending thread from going to sleep which helps performance greatly. 14 ::InitializeCriticalSectionAndSpinCount(&os_lock_, 2000); 15 } 16 ~Lock()17Lock::~Lock() { 18 ::DeleteCriticalSection(&os_lock_); 19 } 20 Acquire()21void Lock::Acquire() { 22 ::EnterCriticalSection(&os_lock_); 23 } 24 Release()25void Lock::Release() { 26 ::LeaveCriticalSection(&os_lock_); 27 } 28 29 #else // Posix implementation. 30 31 Lock::Lock() { 32 pthread_mutex_init(&os_lock_, NULL); 33 } 34 35 Lock::~Lock() { 36 pthread_mutex_destroy(&os_lock_); 37 } 38 39 void Lock::Acquire() { 40 pthread_mutex_lock(&os_lock_); 41 } 42 43 void Lock::Release() { 44 pthread_mutex_unlock(&os_lock_); 45 } 46 47 #endif 48 49 } // namespace pp 50