SynchronizedMemory
SynchronizedMemory<T>(decoree, lock?) decorates memory to apply mutually exclusive lock.
// Create memory
using IMemory<byte> memory = new SynchronizedMemory<byte>(new StreamMemory(new MemoryStream()));
// Write data
Parallel.For(0, 1024, (int i) => memory.Add((byte)i));
// Print
Console.WriteLine(memory.Count); // 1024
.Synchronized(lock?) is extension method that does the same
// Create lock
object mLock = new();
// Create memory
using IMemory<byte> memory = new StreamMemory(new MemoryStream()).Synchronized(mLock);
Full Example
Full example
using Avalanche.Memory;
public class synchronizedmemory
{
public static void Run()
{
{
// <11>
// Create memory
using IMemory<byte> memory = new SynchronizedMemory<byte>(new StreamMemory(new MemoryStream()));
// Write data
Parallel.For(0, 1024, (int i) => memory.Add((byte)i));
// Print
Console.WriteLine(memory.Count); // 1024
// </11>
}
{
// <12>
// Create lock
object mLock = new();
// Create memory
using IMemory<byte> memory = new StreamMemory(new MemoryStream()).Synchronized(mLock);
// </12>
// Write data
Parallel.For(0, 1024, (int i) => memory.Add((byte)i));
// Print
Console.WriteLine(memory.Count); // 1024
}
}
}