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_));