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
22namespace llvm {
23using namespace sys;
24
25MutexImpl::MutexImpl(bool /*recursive*/)
26{
27  data_ = new CRITICAL_SECTION;
28  InitializeCriticalSection((LPCRITICAL_SECTION)data_);
29}
30
31MutexImpl::~MutexImpl()
32{
33  DeleteCriticalSection((LPCRITICAL_SECTION)data_);
34  delete (LPCRITICAL_SECTION)data_;
35  data_ = 0;
36}
37
38bool
39MutexImpl::acquire()
40{
41  EnterCriticalSection((LPCRITICAL_SECTION)data_);
42  return true;
43}
44
45bool
46MutexImpl::release()
47{
48  LeaveCriticalSection((LPCRITICAL_SECTION)data_);
49  return true;
50}
51
52bool
53MutexImpl::tryacquire()
54{
55  return TryEnterCriticalSection((LPCRITICAL_SECTION)data_);
56}
57
58}
59