Is synchronized(mutex) == mutex.lock()?

Steven Schveighoffer schveiguy at yahoo.com
Thu Jul 15 07:33:00 PDT 2010


On Wed, 14 Jul 2010 23:22:20 -0400, Heywood Floyd <soul8o8 at gmail.com>  
wrote:

> Hi!
>
> Breakfast toast: Is there any chance a) and b) below are identical in  
> what they do?
>
>
> auto mutex = new Mutex();
> auto cond = new Condition(mutex);
>
> // a)
> synchronized(mutex){
>    cond.wait();
> }
>
> // b)
> mutex.lock();
>    cond.wait();
> mutex.unlock();

Almost, this is more equivalent:

{
   mutex.lock();
   scope(exit) mutex.unlock();
   cond.wait();
}

But yes, the mutex object implements the monitor interface, and replaces  
its own monitor object with a pointer to itself.

For something really nifty, you can tell mutex to be the monitor object of  
*any* other object :)  Unfortunately, I can't point you at the docs, cause  
they dont exist yet, but this will do it:

class C{}

auto c = new C;
auto m = new Mutex(c); // now synchronizing on c is the same as locking m

-Steve


More information about the Digitalmars-d-learn mailing list