锁定将允许C#中的多个读者

Mik*_*sen 12 .net c# multithreading locking

我有以下代码:

private static object _dbLock = new object();

public static void LoadData()
{
   lock (_dbLock)
   {
      //Load data from the database
   }
}

public static string ReadData(Guid key)
{
   lock (_dbLock)
   {
      //Lookup key in data and return value
   }
}
Run Code Online (Sandbox Code Playgroud)

我不希望允许同时它正在从数据库中加载,因此,我把一个人来读取数据lockReadData.但是,现在如果多个人同时呼叫ReadData,则一次只能呼叫一个呼叫.

有没有办法允许同时调用ReadDataLoadData在运行时阻止读者?

Joh*_*yHK 13

ReaderWriterLockReaderWriterLockSlim类支持该用例.除非您需要3.5之前的支持,否则请使用"Slim"版本.

private static ReaderWriterLockSlim _cacheLock = new ReaderWriterLockSlim();

public static void LoadData()
{
    _cacheLock.EnterWriteLock();
    try
    {
        // Load data from the database
    }
    finally
    {
        _cacheLock.ExitWriteLock();
    }
}

public static string ReadData(Guid key)
{
    _cacheLock.EnterReadLock();
    try
    {
        // Lookup key in data and return value
    }
    finally
    {
        _cacheLock.ExitReadLock();
    }
}
Run Code Online (Sandbox Code Playgroud)