Explain code: C # lock function and threads

I used this template in several projects (this cut-off code from CodeCampServer ), I understand what it does, but I'm really interested to know about this template. In particular:

  • Why is double checking performed _dependenciesRegistered?
  • Why use lock (Lock){}.

Thank.

public class DependencyRegistrarModule : IHttpModule
{
    private static bool _dependenciesRegistered;
    private static readonly object Lock = new object();

    public void Init(HttpApplication context)
    {
        context.BeginRequest += context_BeginRequest;
    }

    public void Dispose() { }

    private static void context_BeginRequest(object sender, EventArgs e)
    {
        EnsureDependenciesRegistered();
    }

    private static void EnsureDependenciesRegistered()
    {
        if (!_dependenciesRegistered)
        {
            lock (Lock)
            {
                if (!_dependenciesRegistered)
                {
                    new DependencyRegistrar().ConfigureOnStartup();
                    _dependenciesRegistered = true;
                }
            }
        }
    }
}
+5
source share
5 answers

This is a double-checked lock pattern .

lock , .
lock , , .
, , .

, .

+13

, EnsureDependenciesRegistered , , , , , .

lock(Lock) ; - , ( lock(...) {...}).

, ( ) lock - , , .

+2

.

, . , , .

+1

:

,

if (needsToDoSomething) {
   DoSomething();
   needsToDoSomething = false;
}

, , , false. .

lock (Lock) {
    if (needsToDoSomething) {
       DoSomething();
       needsToDoSomething = false;
    }
}

, , , , .

 if (needsToDoSomething)
    lock (Lock) {
        if (needsToDoSomething) {
           DoSomething();
           needsToDoSomething = false;
        }
    }

, , , , , .

+1

ConfigureOnStartup(). if (! _dependenciesRegistered) , ConfigureOnStartup() _dependenciesRegistered = true, , . :

  • 1: _dependenciesRegistered == false
  • 2: _dependenciesRegistered == false
  • 1: ConfigureOnStartup()/_dependenciesRegistered = true;
  • 2: , , ConfigureOnStartup().
+1

All Articles