1//= llvm/Support/Unix/RWMutex.inc - Unix 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 Unix specific (non-pthread) RWMutex class.
11//
12//===----------------------------------------------------------------------===//
13
14//===----------------------------------------------------------------------===//
15//=== WARNING: Implementation here must contain only generic UNIX code that
16//===          is guaranteed to work on *all* UNIX variants.
17//===----------------------------------------------------------------------===//
18
19#include "llvm/Support/Mutex.h"
20
21namespace llvm {
22
23using namespace sys;
24
25// This naive implementation treats readers the same as writers.  This
26// will therefore deadlock if a thread tries to acquire a read lock
27// multiple times.
28
29RWMutexImpl::RWMutexImpl() : data_(new MutexImpl(false)) { }
30
31RWMutexImpl::~RWMutexImpl() {
32  delete static_cast<MutexImpl *>(data_);
33}
34
35bool RWMutexImpl::reader_acquire() {
36  return static_cast<MutexImpl *>(data_)->acquire();
37}
38
39bool RWMutexImpl::reader_release() {
40  return static_cast<MutexImpl *>(data_)->release();
41}
42
43bool RWMutexImpl::writer_acquire() {
44  return static_cast<MutexImpl *>(data_)->acquire();
45}
46
47bool RWMutexImpl::writer_release() {
48  return static_cast<MutexImpl *>(data_)->release();
49}
50
51}
52