Minimize lock time

Simen kjaeraas simen.kjaras at gmail.com
Thu Jun 10 03:42:09 PDT 2010


Kagamin <spam at here.lot> wrote:

> Let's consider the following code:
>
> synchronized(syncRoot)
> {
>   if(condition)opSuccess();
>   else writeln(possibly,slow);
> }
>
> Suppose the else close doesn't need to be executed in lock domain and  
> can be slow. How to minimize lock time here?
>
> synchronized(syncRoot)
> {
>   if(condition)opSuccess();
>   else goto Lwrite;
> }
> Lwrite: writeln(possibly,slow);
>
> We can do this... but...

A flag, as has been mentioned, would work.

Other solutions that might work:

////////
synchronized(syncRoot)
{
   if (condition)
   {
     opSuccess();
     return;
   }
}
writeln(possibly,slow);

////////
do
{
   synchronized(syncRoot)
   {
     if (condition)
     {
       opSuccess();
       break;
     }
   }
   writeln(possibly, slow);
} while (false);

////////
bool helperFunc( ) {
   synchronized( syncRoot )
   {
     if ( condition ) {
       opSuccess();
       return true;
     } else {
       return false;
     }
   }
}

if (!helperFunc( )) {
    writeln( possibly, slow );
}

--
Simen


More information about the Digitalmars-d-learn mailing list