13f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 53f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "base/synchronization/lock_impl.h" 63f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 73f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsennamespace base { 83f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsennamespace internal { 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottLockImpl::LockImpl() { 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // The second parameter is the spin count, for short-held locks it avoid the 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // contending thread from going to sleep which helps performance greatly. 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ::InitializeCriticalSectionAndSpinCount(&os_lock_, 2000); 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottLockImpl::~LockImpl() { 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ::DeleteCriticalSection(&os_lock_); 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottbool LockImpl::Try() { 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (::TryEnterCriticalSection(&os_lock_) != FALSE) { 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return true; 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return false; 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid LockImpl::Lock() { 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ::EnterCriticalSection(&os_lock_); 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid LockImpl::Unlock() { 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ::LeaveCriticalSection(&os_lock_); 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 343f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 353f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen} // namespace internal 363f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen} // namespace base 37