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
7namespace base {
8namespace internal {
9
10LockImpl::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
16LockImpl::~LockImpl() {
17  ::DeleteCriticalSection(&native_handle_);
18}
19
20bool LockImpl::Try() {
21  if (::TryEnterCriticalSection(&native_handle_) != FALSE) {
22    return true;
23  }
24  return false;
25}
26
27void LockImpl::Lock() {
28  ::EnterCriticalSection(&native_handle_);
29}
30
31void LockImpl::Unlock() {
32  ::LeaveCriticalSection(&native_handle_);
33}
34
35}  // namespace internal
36}  // namespace base
37