On 2013-10-11 03:05, Jonathan M Davis wrote:
I'm not disagreeing with how shared works. I'm disagreeing with the idea that it's not supposed to be normal to cast shared away when operating on shared objects. I expect that the most common idiom for dealing with shared is to protect it with a lock, cast it to thread-local, do whatever you're going to do with it, make sure that there are no thread-local references to it once you're done operating on it, and then release the lock. e.g.synchronized { auto tc = cast(T)mySharedT; tc.memberFunc(); doStuff(tc); //no thread-local references to tc other than tc should //exist at this point. }
With Michel Fortin's proposal I think the above could work without a cast, if doStuff is pure function.
http://michelf.ca/blog/2012/mutex-synchonization-in-d/ -- /Jacob Carlborg
