using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace Umbraco.Core { /// /// Provides a convenience methodology for implementing locked access to resources. /// /// /// Intended as an infrastructure class. /// public class UpgradeableReadLock : IDisposable { private readonly ReaderWriterLockSlim _rwLock; private bool _upgraded = false; /// /// Initializes a new instance of the class. /// /// The rw lock. public UpgradeableReadLock(ReaderWriterLockSlim rwLock) { _rwLock = rwLock; _rwLock.EnterUpgradeableReadLock(); } public void UpgradeToWriteLock() { _rwLock.EnterWriteLock(); _upgraded = true; } void IDisposable.Dispose() { if (_upgraded) { _rwLock.ExitWriteLock(); } _rwLock.ExitUpgradeableReadLock(); } } }