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