1218885Sdim//= llvm/Support/Unix/RWMutex.inc - Unix Reader/Writer Mutual Exclusion Lock  =//
2218885Sdim//
3218885Sdim//                     The LLVM Compiler Infrastructure
4218885Sdim//
5218885Sdim// This file is distributed under the University of Illinois Open Source
6218885Sdim// License. See LICENSE.TXT for details.
7218885Sdim//
8218885Sdim//===----------------------------------------------------------------------===//
9218885Sdim//
10218885Sdim// This file implements the Unix specific (non-pthread) RWMutex class.
11218885Sdim//
12218885Sdim//===----------------------------------------------------------------------===//
13218885Sdim
14218885Sdim//===----------------------------------------------------------------------===//
15218885Sdim//=== WARNING: Implementation here must contain only generic UNIX code that
16218885Sdim//===          is guaranteed to work on *all* UNIX variants.
17218885Sdim//===----------------------------------------------------------------------===//
18218885Sdim
19276479Sdim#include "llvm/Support/Mutex.h"
20276479Sdim
21218885Sdimnamespace llvm {
22218885Sdim
23218885Sdimusing namespace sys;
24218885Sdim
25276479Sdim// This naive implementation treats readers the same as writers.  This
26276479Sdim// will therefore deadlock if a thread tries to acquire a read lock
27276479Sdim// multiple times.
28218885Sdim
29280031SdimRWMutexImpl::RWMutexImpl() : data_(new MutexImpl(false)) { }
30218885Sdim
31276479SdimRWMutexImpl::~RWMutexImpl() {
32280031Sdim  delete static_cast<MutexImpl *>(data_);
33276479Sdim}
34276479Sdim
35218885Sdimbool RWMutexImpl::reader_acquire() {
36280031Sdim  return static_cast<MutexImpl *>(data_)->acquire();
37218885Sdim}
38218885Sdim
39218885Sdimbool RWMutexImpl::reader_release() {
40280031Sdim  return static_cast<MutexImpl *>(data_)->release();
41218885Sdim}
42218885Sdim
43218885Sdimbool RWMutexImpl::writer_acquire() {
44280031Sdim  return static_cast<MutexImpl *>(data_)->acquire();
45218885Sdim}
46218885Sdim
47218885Sdimbool RWMutexImpl::writer_release() {
48280031Sdim  return static_cast<MutexImpl *>(data_)->release();
49218885Sdim}
50218885Sdim
51218885Sdim}
52