Change allowsUnalignedMemoryAccesses to take type argument since some targets
[llvm/avr.git] / lib / System / Win32 / RWMutex.inc
blobe2692269e3a0bf4a1ac7e842d4c03169e8008659
1 //= llvm/System/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.
12 //===----------------------------------------------------------------------===//
14 //===----------------------------------------------------------------------===//
15 //=== WARNING: Implementation here must contain only generic Win32 code that
16 //===          is guaranteed to work on *all* Win32 variants.
17 //===----------------------------------------------------------------------===//
19 #include "Win32.h"
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.
24 namespace llvm {
25 using namespace sys;
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_));
34   free(data_);
37 bool RWMutexImpl::reader_acquire() {
38   EnterCriticalSection(static_cast<LPCRITICAL_SECTION>(data_));
39   return true;
42 bool RWMutexImpl::reader_release() {
43   LeaveCriticalSection(static_cast<LPCRITICAL_SECTION>(data_));
44   return true;
47 bool RWMutexImpl::writer_acquire() {
48   EnterCriticalSection(static_cast<LPCRITICAL_SECTION>(data_));
49   return true;
52 bool RWMutexImpl::writer_release() {
53   LeaveCriticalSection(static_cast<LPCRITICAL_SECTION>(data_));
54   return true;