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

Reply via email to