On Nov 15, 2012, at 3:16 AM, Regan Heath <[email protected]> wrote:
>
> I suggested something similar as did Sönke:
> http://forum.dlang.org/thread/[email protected]?page=2#post-op.wnnuiio554xghj:40puck.auriga.bhead.co.uk
>
> According to deadalnix the compiler magic I suggested to add the mutex isn't
> possible:
> http://forum.dlang.org/thread/[email protected]?page=3#post-k7qsb5:242gqk:241:40digitalmars.com
>
> Most of our ideas can be implemented with a wrapper template containing the
> sync object (mutex, etc).
If I understand you correctly, you don't need anything that explicitly contains
the sync object. A global table of mutexes used according to the address of
the value to be mutated should work.
> So... my feeling is that the best solution for "shared", ignoring the memory
> barrier aspect which I would relegate to a different feature and solve a
> different way, is..
>
> 1. Remove the existing mutex from object.
> 2. Require that all objects passed to synchronized() {} statements implement
> a synchable(*) interface
> 3. Design a Shared(*) wrapper template/struct that contains a mutex and
> implements synchable(*)
> 4. Design a Shared(*) base class which contains a mutex and implements
> synchable(*)
It would be nice to eliminate the mutex that's optionally built into classes
now. The possibility of having to allocate a new mutex on whatever random
function call happens to be the first one with "synchronized" is kinda not
great.