gpt4 book ai didi

c# - 你在你的网络应用程序中使用锁吗?

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

发布此问题后:

How to lock on an integer in C#?

许多答案让我觉得我是一个在我的网络应用程序中使用锁定的“罪人”。我从没想过这是个问题(如果使用得当),你呢?您曾经在 Web 应用程序中使用过它吗?

我不知道如何在没有锁定的情况下编写 web 应用程序,例如,如果你想从数据库加载一些数据并且你想确保没有其他线程会加载它(也适用于单例),通常你使用锁定,例如:

private _locker =  new object();
private YourClass[] _data;
public YourClass[] Data
{
get
{
if(_data == null)
{
lock( _locker)
{
// get your data
_data = GetYourData();
}
}
return _data;
}
}

这有问题吗?!

编辑:

请注意,我在这里指的是单个服务器场景,对于服务器群,您需要一些分布式锁定机制,但您不希望您创建的每个站点在几周内获得数百万次点击,做你?如果您需要锁定怎么办,如果您使用分布式锁定创建您的站点,对于您不知道它是否需要扩展的应用程序来说,这不是太多了吗?除了这些天计算机变得非常快之外,一台服务器可以处理大量流量,这已经被证明了很多次,一些例子是 plentyoffish.com 和你现在正在使用的这个网站,做一些谷歌搜索,我敢肯定你会遇到很多其他人。

最佳答案

如果您使用锁来尝试控制对远程 资源(例如数据库中的某些内容)的访问,那么当您尝试扩展到更多服务器时就会遇到问题。

如果您只想拥有一个特定于 AppDomain 的锁(例如,用于缓存),那么它非常有意义。

不过,我不同意您隐含的断言,即没有锁定(在 Web 服务器级别)就无法编写 Web 应用程序。这实际上取决于应用程序 - 通常数据库争用是在数据库而不是 Web 服务器上处理的,正是为了让您可以在 Web 层中拥有多台机器。

对于单例来说它有一定的意义,但我很少使用单例......

关于c# - 你在你的网络应用程序中使用锁吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/781532/

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