//= llvm/Support/Unix/RWMutex.inc - Unix Reader/Writer Mutual Exclusion Lock =// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file implements the Unix specific (non-pthread) RWMutex class. // //===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===// //=== WARNING: Implementation here must contain only generic UNIX code that //=== is guaranteed to work on *all* UNIX variants. //===----------------------------------------------------------------------===// #include "llvm/Support/Mutex.h" namespace llvm { using namespace sys; // This naive implementation treats readers the same as writers. This // will therefore deadlock if a thread tries to acquire a read lock // multiple times. RWMutexImpl::RWMutexImpl() : data_(new MutexImpl(false)) { } RWMutexImpl::~RWMutexImpl() { delete static_cast<MutexImpl *>(data_); } bool RWMutexImpl::reader_acquire() { return static_cast<MutexImpl *>(data_)->acquire(); } bool RWMutexImpl::reader_release() { return static_cast<MutexImpl *>(data_)->release(); } bool RWMutexImpl::writer_acquire() { return static_cast<MutexImpl *>(data_)->acquire(); } bool RWMutexImpl::writer_release() { return static_cast<MutexImpl *>(data_)->release(); } }