Phase 20 of 30 · Topic 20.4

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`.