首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于企业库的共享缓存的读写

基于企业库的共享缓存的读写
EN

Stack Overflow用户
提问于 2011-09-16 14:41:48
回答 1查看 1.4K关注 0票数 2

我正在使用Enterprise Lib 5.0缓存应用程序块,我正在尝试找出在多线程场景中处理读/写的最佳方法。在写上加锁而不在读上加锁是推荐的方法吗?

代码语言:javascript
复制
Update(string key, object value)
{
     lock(syncLock)
     { 
        cacheManager.Add(key,value);
     }
}
object Read(string key)
{
     object o = cacheManager.GetData(key);
     return o;
 }
  //OR is the following Read recommended using a lock
object Read(string key)
{   
     lock(syncLock)
     {
       object o = cacheManager.GetData(key);
       return o;
     }
}

我担心的是,如果一个线程将要更新特定键的项,而另一个线程将要读取相同key.Can的项,这会引发竞争吗?

有一个“ReaderWriterLockSlim”的“键”字典,这样你实际上只需要一个特定键的锁,而不是像web应用程序这样的多线程场景中的“公共”锁,这有意义吗?

基本上是这样的:

代码语言:javascript
复制
Dictionary<string,ReaderWriterLockSlim> dict = new Dictionary<string,ReaderWriterLockSlim> ();

void Update(string key, object value)
{
     dict[key].EnterWriteLock();
     cacheManager.Add(key,value);
     dict[key].ExitWriteLock();         
}

object Read(string key)
{
     dict[key].EnterReadLock();    
     object o = cacheManager.GetData(key);
     dict[key].ExitReadLock();    
     return o;
 }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-16 22:50:46

您不应该使用The Caching Application Block进行自己的锁定,因为“您确信该块以线程安全的方式执行”。

如果查看一下Cache的源代码,就会发现AddRemoveGetData方法都会在执行任何操作之前获取内存中缓存上的锁。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7441054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档