blob: 75f01fefacbb0f406e8de0d7b20cefa00d9bc70c [file] [log] [blame]
Dan Gohmanf17a25c2007-07-18 16:29:46 +00001//===- llvm/System/Win32/Mutex.inc - Win32 Mutex Implementation -*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattner081ce942007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Dan Gohmanf17a25c2007-07-18 16:29:46 +00007//
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
22namespace llvm {
23using namespace sys;
24
Owen Anderson052b3062009-06-18 17:53:17 +000025MutexImpl::MutexImpl(bool /*recursive*/)
Dan Gohmanf17a25c2007-07-18 16:29:46 +000026{
27 data_ = new CRITICAL_SECTION;
28 InitializeCriticalSection((LPCRITICAL_SECTION)data_);
29}
30
Owen Anderson052b3062009-06-18 17:53:17 +000031MutexImpl::~MutexImpl()
Dan Gohmanf17a25c2007-07-18 16:29:46 +000032{
33 DeleteCriticalSection((LPCRITICAL_SECTION)data_);
34 delete (LPCRITICAL_SECTION)data_;
35 data_ = 0;
36}
37
38bool
Owen Anderson052b3062009-06-18 17:53:17 +000039MutexImpl::acquire()
Dan Gohmanf17a25c2007-07-18 16:29:46 +000040{
41 EnterCriticalSection((LPCRITICAL_SECTION)data_);
42 return true;
43}
44
45bool
Owen Anderson052b3062009-06-18 17:53:17 +000046MutexImpl::release()
Dan Gohmanf17a25c2007-07-18 16:29:46 +000047{
48 LeaveCriticalSection((LPCRITICAL_SECTION)data_);
49 return true;
50}
51
52bool
Owen Anderson052b3062009-06-18 17:53:17 +000053MutexImpl::tryacquire()
Dan Gohmanf17a25c2007-07-18 16:29:46 +000054{
55 return TryEnterCriticalSection((LPCRITICAL_SECTION)data_);
56}
57
58}