1
//= llvm/System/Win32/Mutex.inc - Win32 Reader/Writer Mutual Exclusion Lock =//
3
// The LLVM Compiler Infrastructure
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
10
// This file implements the Win32 specific (non-pthread) RWMutex class.
12
//===----------------------------------------------------------------------===//
14
//===----------------------------------------------------------------------===//
15
//=== WARNING: Implementation here must contain only generic Win32 code that
16
//=== is guaranteed to work on *all* Win32 variants.
17
//===----------------------------------------------------------------------===//
21
// FIXME: Windows does not have reader-writer locks pre-Vista. If you want
22
// real reader-writer locks, you a pthreads implementation for Windows.
27
RWMutexImpl::RWMutexImpl() {
28
data_ = calloc(1, sizeof(CRITICAL_SECTION));
29
InitializeCriticalSection(static_cast<LPCRITICAL_SECTION>(data_));
32
RWMutexImpl::~RWMutexImpl() {
33
DeleteCriticalSection(static_cast<LPCRITICAL_SECTION>(data_));
37
bool RWMutexImpl::reader_acquire() {
38
EnterCriticalSection(static_cast<LPCRITICAL_SECTION>(data_));
42
bool RWMutexImpl::reader_release() {
43
LeaveCriticalSection(static_cast<LPCRITICAL_SECTION>(data_));
47
bool RWMutexImpl::writer_acquire() {
48
EnterCriticalSection(static_cast<LPCRITICAL_SECTION>(data_));
52
bool RWMutexImpl::writer_release() {
53
LeaveCriticalSection(static_cast<LPCRITICAL_SECTION>(data_));