Home | History | Annotate | Download | only in synchronization
      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