在任何超过半成品的DBMS中,读锁和更新锁之间存在区别.在我的多线程C#代码中,到目前为止,我已经使用了lock关键字,但是今天我发现如果我能在锁定中实现读取与写入的区别,那么我的应用程序中的性能会好很多.我有许多线程可以同时安全地读取,但是为了不经常但不可避免的写入,它们互相阻碍.
我可以,而且我想我将不得不实现我自己的锁定方案,其中写锁的请求都会停止获取进一步的读锁,并且在现有的读锁被释放之前一直停止.
这些都不是非常困难的,并且所有这些都是通过日期和其他人在您想要命名的任何数据库理论文本中详细描述的细节来描述的.
当然,我不是第一个面对这种需求的人吗?有什么,特别是C#?
谢谢你,德米特里.
我希望的另一件事是人们可能对您尝试过的任何图书馆的优点和缺点有任何经验和评论.
天哪,那就是System.Core!停下来,德米特里,你让我觉得自己老了.
我想知道游说微软提供类似lock (object) { ... }语法的语法糖的最实用方法是什么.
改编自MSDN示例
public class SynchronizedCache
{
private ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim();
private Dictionary<int, string> innerCache = new Dictionary<int, string>();
public string Read(int key)
{
cacheLock.EnterReadLock();
try
{
return innerCache[key];
}
finally
{
cacheLock.ExitReadLock();
}
}
public void Add(int key, string value)
{
cacheLock.EnterWriteLock();
try
{
innerCache.Add(key, value);
}
finally
{
cacheLock.ExitWriteLock();
}
}
...
Run Code Online (Sandbox Code Playgroud)
这与Monitor的明确使用密切相关.在MS的帮助下,它可以像这样干净简单.
private Dictionary<int, string> innerCache = new Dictionary<int, string>();
public string Read(int key)
{
readlock(innerCache) return innerCache[key];
}
public void Add(int key, string value)
{
writelock (innerCache) innerCache.Add(key, value);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
836 次 |
| 最近记录: |