1 /****************************************************************************** 2 This source file is part of the Avogadro project. 3 This source code is released under the 3-Clause BSD License, (see "LICENSE"). 4 ******************************************************************************/ 5 6 #include "sharedmutex.h" 7 8 #include <shared_mutex> 9 10 namespace Avogadro { 11 namespace Core { 12 13 using std::shared_mutex; 14 15 class SharedMutex::PIMPL 16 { 17 public: PIMPL()18 PIMPL() {} 19 20 shared_mutex lock; 21 }; 22 SharedMutex()23SharedMutex::SharedMutex() : d(new PIMPL) {} 24 ~SharedMutex()25SharedMutex::~SharedMutex() 26 { 27 delete d; 28 } 29 lockForRead()30void SharedMutex::lockForRead() 31 { 32 d->lock.lock_shared(); 33 } 34 tryLockForRead()35bool SharedMutex::tryLockForRead() 36 { 37 return d->lock.try_lock_shared(); 38 } 39 unlockForRead()40void SharedMutex::unlockForRead() 41 { 42 d->lock.unlock_shared(); 43 } 44 lockForWrite()45void SharedMutex::lockForWrite() 46 { 47 d->lock.lock(); 48 } 49 tryLockForWrite()50bool SharedMutex::tryLockForWrite() 51 { 52 return d->lock.try_lock(); 53 } 54 unlockForWrite()55void SharedMutex::unlockForWrite() 56 { 57 d->lock.unlock(); 58 } 59 60 } // namespace Core 61 } // namespace Avogadro 62