您是否在Web应用程序中使用锁定?

Wal*_*ssa 1 c# asp.net

发布此问题后:

如何在C#中锁定整数?

许多答案让我觉得我是在我的网络应用程序中使用锁定的"罪人".我从没想过这是一个问题(如果明智地使用),你呢?你有没有在你的网络应用程序中使用它?

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

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

这有问题吗?!

编辑:

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

Jon*_*eet 11

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

如果你只想拥有一个AppDomain特定的锁(例如缓存)那么它就非常有意义了.

我不同意你暗示的断言,即Web应用程序无法在没有锁定的情况下编写(在Web服务器级别).它实际上取决于应用程序 - 通常数据库争用是在数据库而不是Web服务器上处理的,因此您可以在Web层中拥有多台计算机.

对于单身人士而言,它具有一定的意义,但无论如何我很少使用单身人士......