urbackup_backend/Interface/SharedMutex.h

35 lines
927 B
C++

#pragma once
#include "Mutex.h"
class ISharedMutex : public IObject
{
public:
virtual ILock* readLock()=0;
virtual ILock* writeLock()=0;
};
class IScopedWriteLock
{
public:
IScopedWriteLock(ISharedMutex *pMutex){ if(pMutex!=NULL)lock=pMutex->writeLock();else lock=NULL; }
~IScopedWriteLock(){ if(lock!=NULL) lock->Remove(); }
void relock(ISharedMutex *pMutex){ if(lock!=NULL) lock->Remove(); if(pMutex!=NULL)lock=pMutex->writeLock();else lock=NULL; }
ILock * getLock(){ return lock; }
private:
ILock *lock;
};
class IScopedReadLock
{
public:
IScopedReadLock(ISharedMutex *pMutex){ if(pMutex!=NULL)lock=pMutex->readLock();else lock=NULL; }
~IScopedReadLock(){ if(lock!=NULL) lock->Remove(); }
void relock(ISharedMutex *pMutex){ if(lock!=NULL) lock->Remove(); if(pMutex!=NULL)lock=pMutex->readLock();else lock=NULL; }
ILock * getLock(){ return lock; }
private:
ILock *lock;
};