这是场景:
线程 A 询问所有法语书籍
线程 B 询问所有阿拉伯语书籍
如果线程 A 在锁定区域内,线程 B 将在锁定区域外等待线程 A 完成。
因为代码中只有一个“地方”可以让线程 B 获取他的数据。
我想根据缓存中的密钥进行锁定,这意味着:
if(Cache["BooksInFrench"] == null)
{
lock("BooksInFrench")
{
if(Cache["BooksInFrench"] == null)
{
object d = GetFromDB();
cache["BooksInFrench"] = d;
}
}
BooksInArabic 等也是如此......所以这样,如果我有 200 个连接到我的网站,其中 10 个请求 BooksInFrench,其余的请求(BooksInArabic,BooksInHebrew......)可以运行并获取他们的数据因为他们的请求不在锁定区域。
我当前的代码如下所示: http: //pastebin.com/LFhxgHDM
我认为双重锁定不是很好......你看到任何其他解决方案/改进吗?