Home | History | Annotate | Download | only in Windows
      1 //===- llvm/Support/Win32/Mutex.inc - Win32 Mutex Implementation -*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file implements the Win32 specific (non-pthread) Mutex class.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 //===----------------------------------------------------------------------===//
     15 //=== WARNING: Implementation here must contain only generic Win32 code that
     16 //===          is guaranteed to work on *all* Win32 variants.
     17 //===----------------------------------------------------------------------===//
     18 
     19 #include "WindowsSupport.h"
     20 #include "llvm/Support/Mutex.h"
     21 
     22 namespace llvm {
     23 using namespace sys;
     24 
     25 MutexImpl::MutexImpl(bool /*recursive*/)
     26 {
     27   data_ = new CRITICAL_SECTION;
     28   InitializeCriticalSection((LPCRITICAL_SECTION)data_);
     29 }
     30 
     31 MutexImpl::~MutexImpl()
     32 {
     33   DeleteCriticalSection((LPCRITICAL_SECTION)data_);
     34   delete (LPCRITICAL_SECTION)data_;
     35   data_ = 0;
     36 }
     37 
     38 bool
     39 MutexImpl::acquire()
     40 {
     41   EnterCriticalSection((LPCRITICAL_SECTION)data_);
     42   return true;
     43 }
     44 
     45 bool
     46 MutexImpl::release()
     47 {
     48   LeaveCriticalSection((LPCRITICAL_SECTION)data_);
     49   return true;
     50 }
     51 
     52 bool
     53 MutexImpl::tryacquire()
     54 {
     55   return TryEnterCriticalSection((LPCRITICAL_SECTION)data_);
     56 }
     57 
     58 }
     59