gpt4 book ai didi

c# - 线程 : allow one thread to access data while blocking others, 然后停止阻塞的线程执行相同的代码

转载 作者:太空宇宙 更新时间:2023-11-03 17:06:10 25 4
gpt4 key购买 nike

想象一下带有一些内存缓存的最简单的数据库访问代码 -

if exists in cache  
return object
else
get from DB
add to cache
return object

现在,如果数据库访问需要一秒钟,并且我有 5 个 ASP.Net 请求/线程在那一秒内访问了相同的代码,我如何确保只有第一个调用数据库?我周围有一个简单的线程锁,但它只是以有序的方式将它们排队,允许每个线程依次调用数据库。我的数据存储库基本上一次读取整个表,所以我们不是在谈论通过 Id 数据请求获取。

关于如何执行此操作的任何想法?线程等待句柄听起来几乎是我所追求的,但我不知道如何对其进行编码。

这一定是常见的情况吧?

现有的伪代码:

lock (threadLock)  
{
get collection of entities using Fluent NHib
add collection to cache
}

谢谢,上校

最佳答案

您基本上已经回答了您自己的问题。 “lock()”很好,它可以防止其他线程进入该代码,而任何其他线程都在那里。然后,在锁内执行您的第一个伪代码。检查它是否已经缓存,如果没有,检索值并缓存它。然后下一个线程将进入,检查缓存,发现它可用并使用它。

关于c# - 线程 : allow one thread to access data while blocking others, 然后停止阻塞的线程执行相同的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4627488/

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