Something needs to happen with shared, and soon.
Sean Kelly
sean at invisibleduck.org
Thu Nov 15 08:20:19 PST 2012
On Nov 15, 2012, at 3:16 AM, Regan Heath <regan at netmail.co.nz> wrote:
>
> I suggested something similar as did Sönke:
> http://forum.dlang.org/thread/k7orpj$1tt5$1@digitalmars.com?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/k7orpj$1tt5$1@digitalmars.com?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.
More information about the Digitalmars-d
mailing list