Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Lock
Message
From
20/05/2011 11:07:03
 
 
To
20/05/2011 10:37:33
Timothy Bryan
Sharpline Consultants
Conroe, Texas, United States
General information
Forum:
ASP.NET
Category:
Coding, syntax and commands
Title:
Re: Lock
Environment versions
Environment:
C# 3.0
OS:
Windows XP SP2
Application:
Desktop
Miscellaneous
Thread ID:
01511264
Message ID:
01511273
Views:
36
>Hi all,
>
>I have this method I am refactoring for various reasons. There is a lot of nesting and plan to remove some of it. I am wondering about this intital test inside of a lock statement and wonder if it would be safe to move it outside of the lock construct.
>
>This is what it looks like now.
>
>public void FindActiveWebService()
>{
>    lock (FindWebServiceSync)
>    {
>        if (!IsFindingActiveWebService)
>        {
>            IsFindingActiveWebService = true;
>            try
>            {
>                // Lots of crappy code and nested code in here with loops and such.
>                // Planning to refactor all this junk.
>            }
>            finally
>            {
>                IsFindingActiveWebService = false;
>            }
>        }
>    }
>}
>
>
>Wondering if it would be just as safe to do this and remove the extra if structure.
>
>public void FindActiveWebService()
>{
>    // Moved outside the lock
>    if (IsFindingActiveWebService)
>        return;
>
>    lock (FindWebServiceSync)
>    {
>        IsFindingActiveWebService = true;
>        try
>        {
>            // Lots of crappy code and nested code in here with loops and such.
>            // Planning to refactor all this junk.
>        }
>        finally
>        {
>            IsFindingActiveWebService = false;
>        }
>    }
>}
>
>
>Thanks for any thoughts.

Presumably, in the current code, IsFindingActiveWebService is referenced outside of the FindActiveWebService() method for some purpose - if it is not then it is redundant since no other thread would get inside the lock whilst it is set true.

I guess your proposed change would prevent a second thread attempting the lock maybe 99.999% of the time but there's always a chance the 'if' will execute before IsFindingActiveWebService gets set true. But when that happens it presumably would be no different to running the method consecutively with no lock contention ?
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform