Sharing Ref Counted Containers
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Wed Aug 4 21:05:55 PDT 2010
Michel Fortin wrote:
> On 2010-08-04 21:55:33 -0400, Jonathan M Davis <jmdavisprog at gmail.com>
> said:
>
>> I would have thought that sharing pretty much _any_ type more complex
>> than a
>> primitive type without it being synchronized would be a bad idea. And
>> since the
>> standard containers obviously aren't going to be synchronized, I would
>> expect
>> you to have to wrap them in a class or struct which is synchronized.
>
> You're exactly right Jonathan. The problem is that 'synchronized' only
> protects what's directly inside the class and doesn't protect anything
> beyond an indirection. The container and its reference counter is beyond
> an indirection, so it is not protected by 'synchronized' and is thus
> 'shared' according to the type system.
>
> So that's what the type system tells you. You can cast your way around
> that undesired 'shared', and it's the only way to use a container in a
> synchronized class. I think that's the reason dsimcha wants the
> documentation to be clearer. Because using a container inside a
> synchronized class is probably going to be a common thing, what you
> should and should not do with the container should be documented for
> when you cast your way around the type system.
>
> Personally, I'd say that not being able to use a container inside a
> synchronized class without subverting the type system looks like a
> failure of the type system.
How about an insufficiency of the container library?
Andrei
More information about the Digitalmars-d
mailing list