using System;
namespace Umbraco.Core
{
///
/// Provides an equivalent to the c# lock statement, to be used in a using block.
///
/// Ie replace lock (o) {...} by using (new MonitorLock(o)) { ... }
public class MonitorLock : IDisposable
{
private readonly object _locker;
private readonly bool _entered;
///
/// Initializes a new instance of the class with an object to lock.
///
/// The object to lock.
/// Should always be used within a using block.
public MonitorLock(object locker)
{
_locker = locker;
_entered = false;
System.Threading.Monitor.Enter(_locker, ref _entered);
}
void IDisposable.Dispose()
{
if (_entered)
System.Threading.Monitor.Exit(_locker);
}
}
}