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)
我不希望允许同时它正在从数据库中加载,因此,我把一个人来读取数据lock在ReadData.但是,现在如果多个人同时呼叫ReadData,则一次只能呼叫一个呼叫.
有没有办法允许同时调用ReadData但LoadData在运行时阻止读者?
Joh*_*yHK 13
在ReaderWriterLock与ReaderWriterLockSlim类支持该用例.除非您需要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)
| 归档时间: |
|
| 查看次数: |
622 次 |
| 最近记录: |