RWLockedMemory
RWLockedMemory<T>(decoree, lock?) decorates memory to apply ReaderWriterLock.
// Create lock
ReaderWriterLock @lock = new();
// Create memory
using IMemory<byte> memory = new RWLockedMemory<byte>(new BlockMemory<byte>(), @lock);
// Write data
Parallel.For(0, 1024, (int i) => memory.Add((byte)i));
// Print
Console.WriteLine(memory.Count); // 1024
.RWLocked(lock?) is extension method that does the same
// Create lock
ReaderWriterLock @lock = new();
// Create memory
using IMemory<byte> memory = new BlockMemory<byte>().RWLocked(@lock);
Full Example
Full example
using Avalanche.Memory;
using Avalanche.Utilities;
using static System.Console;
public class rwlockedmemory
{
public static void Run()
{
{
// <11>
// Create lock
ReaderWriterLock @lock = new();
// Create memory
using IMemory<byte> memory = new RWLockedMemory<byte>(new BlockMemory<byte>(), @lock);
// Write data
Parallel.For(0, 1024, (int i) => memory.Add((byte)i));
// Print
Console.WriteLine(memory.Count); // 1024
// </11>
}
{
// <12>
// Create lock
ReaderWriterLock @lock = new();
// Create memory
using IMemory<byte> memory = new BlockMemory<byte>().RWLocked(@lock);
// </12>
// Write data
Parallel.For(0, 1024, (int i) => memory.Add((byte)i));
// Print
Console.WriteLine(memory.Count); // 1024
}
}
}