namespace PlcSiemens.Core.Extension
{
public static class ReaderWriterLockSlimExtensions
{
/// An atom read action wrapper.
///
///
///
///
public static void AtomRead(this ReaderWriterLockSlim readerWriterLockSlim, Action action)
{
if (readerWriterLockSlim == null)
{
throw new ArgumentNullException("readerWriterLockSlim");
}
if (action == null)
{
throw new ArgumentNullException("action");
}
readerWriterLockSlim.EnterReadLock();
try
{
action();
}
finally
{
readerWriterLockSlim.ExitReadLock();
}
}
/// An atom read func wrapper.
///
///
///
///
///
///
public static T AtomRead(this ReaderWriterLockSlim readerWriterLockSlim, Func function)
{
if (readerWriterLockSlim == null)
{
throw new ArgumentNullException("readerWriterLockSlim");
}
if (function == null)
{
throw new ArgumentNullException("function");
}
readerWriterLockSlim.EnterReadLock();
try
{
return function();
}
finally
{
readerWriterLockSlim.ExitReadLock();
}
}
/// An atom write action wrapper.
///
///
///
///
public static void AtomWrite(this ReaderWriterLockSlim readerWriterLockSlim, Action action)
{
if (readerWriterLockSlim == null)
{
throw new ArgumentNullException("readerWriterLockSlim");
}
if (action == null)
{
throw new ArgumentNullException("action");
}
readerWriterLockSlim.EnterWriteLock();
try
{
action();
}
finally
{
readerWriterLockSlim.ExitWriteLock();
}
}
/// An atom write func wrapper.
///
///
///
///
///
///
public static T AtomWrite(this ReaderWriterLockSlim readerWriterLockSlim, Func function)
{
if (readerWriterLockSlim == null)
{
throw new ArgumentNullException("readerWriterLockSlim");
}
if (function == null)
{
throw new ArgumentNullException("function");
}
readerWriterLockSlim.EnterWriteLock();
try
{
return function();
}
finally
{
readerWriterLockSlim.ExitWriteLock();
}
}
}
}