gpt4 book ai didi

c# - 基于企业库的共享缓存读写

转载 作者:行者123 更新时间:2023-11-30 22:35:24 25 4
gpt4 key购买 nike

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

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;
}
}

我担心的是,如果一个线程即将更新特定键的项目,而另一个线程即将读取同一键的项目。这会导致竞争吗?

拥有一个包含“ReaderWriterLockSlim”的“keys”字典是否有意义,这样你基本上只会为一个特定的键锁定,而不是在像网络应用程序这样的多线程场景中使用“公共(public)”锁:

基本上是这样的:

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;
}

最佳答案

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

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

关于c# - 基于企业库的共享缓存读写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7441054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com