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