1//= llvm/Support/Win32/Mutex.inc - Win32 Reader/Writer Mutual Exclusion Lock =// 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) RWMutex 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 "Windows.h" 20 21// FIXME: Windows does not have reader-writer locks pre-Vista. If you want 22// real reader-writer locks, you a threads implementation for Windows. 23 24namespace llvm { 25using namespace sys; 26 27RWMutexImpl::RWMutexImpl() { 28 data_ = calloc(1, sizeof(CRITICAL_SECTION)); 29 InitializeCriticalSection(static_cast<LPCRITICAL_SECTION>(data_)); 30} 31 32RWMutexImpl::~RWMutexImpl() { 33 DeleteCriticalSection(static_cast<LPCRITICAL_SECTION>(data_)); 34 free(data_); 35} 36 37bool RWMutexImpl::reader_acquire() { 38 EnterCriticalSection(static_cast<LPCRITICAL_SECTION>(data_)); 39 return true; 40} 41 42bool RWMutexImpl::reader_release() { 43 LeaveCriticalSection(static_cast<LPCRITICAL_SECTION>(data_)); 44 return true; 45} 46 47bool RWMutexImpl::writer_acquire() { 48 EnterCriticalSection(static_cast<LPCRITICAL_SECTION>(data_)); 49 return true; 50} 51 52bool RWMutexImpl::writer_release() { 53 LeaveCriticalSection(static_cast<LPCRITICAL_SECTION>(data_)); 54 return true; 55} 56 57 58} 59