synchronized (this[.classinfo]) in druntime and phobos

Steven Schveighoffer schveiguy at yahoo.com
Thu May 31 04:14:04 PDT 2012


On Wed, 30 May 2012 17:42:47 -0400, José Armando García Sancio  
<jsancio at gmail.com> wrote:

> On Wed, May 30, 2012 at 5:30 PM, Steven Schveighoffer
> <schveiguy at yahoo.com> wrote:
>> All deadlocks involving A and B mutexes.  Or if not, can you show how?  
>>  I
>> can't see it.
>>
>> -Steve
>
> This can cause a deadlock because locking order is not guaranteed, no?
>
> synchronized class A {
>   void delegate(B b) { b.call() }
>   void call() {}
> }
>
> synchronized class B {
>   void delegate(A a) { a.call() }
>   void call() {}
> }
>
> Thanks,
> -Jose
> PS. This may not compile not sure if it should be 'void
> delegate(shared B b)', etc.

A and B are not modifiable.  Given the implementation of A and B that I  
gave, how can you achieve deadlock?

The big problem I see with allowing anyone to synchronize on A and B is  
that one cannot achieve the property of "not possible to use me in a  
deadlock."

-Steve


More information about the Digitalmars-d mailing list