1 // Copyright (c) 2011 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 "base/synchronization/lock_impl.h" 6 7 namespace base { 8 namespace internal { 9 10 LockImpl::LockImpl() { 11 // The second parameter is the spin count, for short-held locks it avoid the 12 // contending thread from going to sleep which helps performance greatly. 13 ::InitializeCriticalSectionAndSpinCount(&native_handle_, 2000); 14 } 15 16 LockImpl::~LockImpl() { 17 ::DeleteCriticalSection(&native_handle_); 18 } 19 20 bool LockImpl::Try() { 21 if (::TryEnterCriticalSection(&native_handle_) != FALSE) { 22 return true; 23 } 24 return false; 25 } 26 27 void LockImpl::Lock() { 28 ::EnterCriticalSection(&native_handle_); 29 } 30 31 void LockImpl::Unlock() { 32 ::LeaveCriticalSection(&native_handle_); 33 } 34 35 } // namespace internal 36 } // namespace base 37