private void ReleaseLockIfUnused(ISynchronizableLibraryRepository repository, CountableReaderWriterLockSlim repositoryLock) { if (repositoryLock.ReadLockCount == 0 && repositoryLock.WriteLockCount == 0) { _repositoryLocks.Remove(repository.Id); repositoryLock.Dispose(); } }
public bool TryBeginWrite(ISynchronizableLibraryRepository repository) { CountableReaderWriterLockSlim repositoryLock; lock (_repositoryLocks) { if (_repositoryLocks.ContainsKey(repository.Id)) { repositoryLock = _repositoryLocks[repository.Id]; if (repositoryLock.WriteLockCount > 0) { return false; } } else { repositoryLock = new CountableReaderWriterLockSlim(); _repositoryLocks.Add(repository.Id, repositoryLock); } repositoryLock.WriteLockCount++; } repositoryLock.EnterWriteLock(); return true; }
public bool TryBeginWrite(ISynchronizableLibraryRepository repository) { CountableReaderWriterLockSlim repositoryLock; lock (_repositoryLocks) { if (_repositoryLocks.ContainsKey(repository.Id)) { repositoryLock = _repositoryLocks[repository.Id]; if (repositoryLock.WriteLockCount > 0) { return(false); } } else { repositoryLock = new CountableReaderWriterLockSlim(); _repositoryLocks.Add(repository.Id, repositoryLock); } repositoryLock.WriteLockCount++; } repositoryLock.EnterWriteLock(); return(true); }
private void ReleaseLockIfUnused(ISynchronizableLibraryRepository repository, CountableReaderWriterLockSlim repositoryLock) { if (repositoryLock.ReadLockCount == 0 && repositoryLock.WriteLockCount == 0) { _repositoryLocks.Remove(repository.Id); repositoryLock.Dispose(); } }