Win32 support for Mutex class.
[oota-llvm.git] / lib / System / Win32 / Mutex.inc
1 //===- llvm/System/Win32/Mutex.inc - Win32 Mutex Implementation -*- C++ -*-===//
2 // 
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file was developed by Jeff Cohen and is distributed under the 
6 // University of Illinois Open Source 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 "Win32.h"
20 #include "llvm/System/Mutex.h"
21
22 namespace llvm {
23 using namespace sys;
24
25 Mutex::Mutex(bool /*recursive*/)
26 {
27   data_ = new CRITICAL_SECTION;
28   InitializeCriticalSection((LPCRITICAL_SECTION)data_);
29 }
30
31 Mutex::~Mutex()
32 {
33   DeleteCriticalSection((LPCRITICAL_SECTION)data_);
34   data_ = 0;
35 }
36
37 bool 
38 Mutex::acquire()
39 {
40   EnterCriticalSection((LPCRITICAL_SECTION)data_);
41   return true;
42 }
43
44 bool 
45 Mutex::release()
46 {
47   LeaveCriticalSection((LPCRITICAL_SECTION)data_);
48   return true;
49 }
50
51 bool 
52 Mutex::tryacquire()
53 {
54   return TryEnterCriticalSection((LPCRITICAL_SECTION)data_);
55 }
56
57 }