High-Read, Low-Write Concurrency: `ReaderWriterLockSlim`
1Concept
`ReaderWriterLockSlim` allows multiple concurrent reader threads to execute simultaneously while enforcing mutual exclusivity for writer threads, optimizing read-heavy in-memory databases.
2Architecture Diagram
[ Reader 1 ] ──┐
[ Reader 2 ] ──┼──> [ Concurrent Read Access Granted (Multiple Readers) ]
[ Reader 3 ] ──┘
│
[ Writer Thread ] ──> [ Blocks until all Readers finish; enters Exclusive Write Mode ]3Code Example
C# 13 & .NET 9
using System;
using System.Collections.Generic;
using System.Threading;
public class CacheStorage
{
private readonly ReaderWriterLockSlim _lock = new();
private readonly Dictionary<string, string> _data = new();
public string? Read(string key)
{
_lock.EnterReadLock();
try
{
return _data.TryGetValue(key, out var val) ? val : null;
}
finally { _lock.ExitReadLock(); }
}
public void Write(string key, string val)
{
_lock.EnterWriteLock();
try
{
_data[key] = val;
}
finally { _lock.ExitWriteLock(); }
}
}
public class RwLockDemo
{
public static void Main()
{
var cache = new CacheStorage();
cache.Write("status", "ACTIVE");
Console.WriteLine($"Cache Value: {cache.Read("status")}");
}
}4Expected Output
Cache Value: ACTIVE
5Key Takeaways
- ✓Always dispose `ReaderWriterLockSlim` when tearing down services.
- ✓Supports upgradable read locks (`EnterUpgradeableReadLock`).
- ✓For pure dictionary caches, prefer `ConcurrentDictionary`.