queue container?
Timon Gehr
timon.gehr at gmx.ch
Wed Oct 26 12:33:38 PDT 2011
On 10/26/2011 07:21 PM, Steven Schveighoffer wrote:
> On Wed, 26 Oct 2011 12:35:32 -0400, Timon Gehr <timon.gehr at gmx.ch> wrote:
>
>> On 10/26/2011 04:36 PM, Steven Schveighoffer wrote:
>>> On Wed, 26 Oct 2011 10:13:06 -0400, Gor Gyolchanyan
>>> <gor.f.gyolchanyan at gmail.com> wrote:
>>>
>>>> It should have both shared and unshared implementations of methods to
>>>> be a full-fledged container.
>>>
>>> Maybe, maybe not.
>>>
>>> I'm reluctant to add a copy of all functions to the containers just to
>>> support shared. We don't have a const or inout equivalent for shared.
>>>
>>
>> Copying all the methods and marking them with shared does not make the
>> code thread safe. The shared and unshared versions would have to be
>> different anyways. There is no way do get something that relates to
>> shared/unshared as const does to mutable/immutable.
>
> You would mark them shared and synchronized. The shared modifier
> guarantees you don't put unshared data into the container, and the
> synchronized modifier guarantees you don't violate thread safety (as far
> as container topology is concerned at least).
>
> But the method content would be identical.
>
> -Steve
And sometimes it will even work.
But synchronization=locking is inefficient and does not work in the
general case (starvation, dead lock), and if it does, it is very hard to
prove correct. The design and implementation of efficient shared
containers with strong correctness and liveness guarantees is way more
involved than simply putting synchronized on an existing class whose
implementation worked well for serial computing. (but I am sure you know
that)
More information about the Digitalmars-d
mailing list