comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Multitasking and containers
Date: Fri, 24 Nov 2006 12:14:41 +0100
Date: 2006-11-24T12:14:41+01:00	[thread overview]
Message-ID: <143yx0dos45nx.159wpxvfevtt8.dlg@40tude.net> (raw)
In-Reply-To: ek6hsv$t1o$1@cernne03.cern.ch

On Fri, 24 Nov 2006 11:35:11 +0100, Maciej Sobczak wrote:

> Dmitry A. Kazakov wrote:
> 
>>> Paragraph 3 in Annex A says that it's OK to call any standard subprogram 
>>> from concurrent tasks as long as the parameters do not overlap. John 
>>> Barnes ("Progamming in Ada 2005") suggests that in order to (for 
>>> example) read from the same container, the operations need to be 
>>> protected "by using the normal techniques such as protected objects".
>>>
>>> But reading from the protected object is not mutually exclusive (many 
>>> readers are allowed) - so where's the gain? What's the difference 
>>> between concurrent reads of, say, a Vector via protected object vs. 
>>> direct access?
>> 
>> I think he didn't mean container being a protected object.
> 
> No, but you might want to encapsulate a container within a protected 
> object and have some protected procedures and functions forwarding to 
> relevant ones in the container.

OK, but that's same to me. Aggregation + delegation = inheritance for
poor...

>> [ I don't know if ARM 2005 permits mutable implementations of read
>> operations on the containers. I suppose it does, so the need to lock upon
>> read. ]
> 
> That would be interesting, but would break apart when encapsulated 
> within a protected object, because there multiple readers would be allowed.
> 
> Having a mutex for readers sounds like a concurrency killer and relying 
> on protected wrappers seems to be fragile because of this possible 
> mutability. So - what is The Solution (tm) for multiple tasks reading 
> from the same container?
> 
> Let's say you want to have N worker tasks consulting a shared dictionary 
> (map) that was initialized before the tasks started their work. How 
> would you solve this?

I would try to decouple the mutable part. [ It is a quite common problem,
not necessarily in the context of concurrent programming. ] The cache that
does not belong to the container should be associated with the caller's
task. That would eliminate any need of locking. The cache shared between
the callers should be locked when changed. So a protected object should be
associated with that cache, not with the container as a whole.

Write your own container. Parallel systems require delicate handmade work.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2006-11-24 11:14 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-11-24  8:51 Multitasking and containers Maciej Sobczak
2006-11-24 10:11 ` Georg Bauhaus
2006-11-24 10:19 ` Dmitry A. Kazakov
2006-11-24 10:35   ` Maciej Sobczak
2006-11-24 11:14     ` Dmitry A. Kazakov [this message]
2006-11-24 12:13       ` Matthew Heaney
2006-11-27  4:17         ` Jeffrey R. Carter
2006-11-27 10:30           ` Georg Bauhaus
2006-11-27 18:41             ` Jeffrey R. Carter
2006-11-27 18:57               ` Dmitry A. Kazakov
2006-11-27 19:45               ` Matthew Heaney
2006-11-27 21:15                 ` Simon Wright
2006-11-28  1:43                 ` Dr. Adrian Wrigley
2006-11-28  2:19                   ` Matthew Heaney
2006-11-28  8:50                     ` Dmitry A. Kazakov
2006-11-28 10:31                       ` Georg Bauhaus
2006-11-28 11:24                         ` Dmitry A. Kazakov
2006-11-29  8:51                           ` Georg Bauhaus
2006-11-28 17:12                       ` Matthew Heaney
2006-11-28 18:21                         ` Dmitry A. Kazakov
2006-11-28 19:17                           ` Matthew Heaney
2006-11-29 18:43                             ` Dmitry A. Kazakov
2006-11-29 10:14                       ` Maciej Sobczak
2006-11-29 15:50                         ` Matthew Heaney
2006-11-24 12:12     ` Matthew Heaney
2006-11-24 12:05   ` Matthew Heaney
2006-11-24 12:02 ` Matthew Heaney
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox