On Wed, 17 Nov 2010 09:17:05 -0500, dsimcha <dsim...@yahoo.com> wrote:

== Quote from Steven Schveighoffer (schvei...@yahoo.com)'s article
I think in general containers don't work across multiple threads unless
specifically designed to do that.

I'm making the assumption that you'd handle all the synchronization issues yourself. When you need to update the container, there's an obvious issue. In general I don't like the trend in D of building things into arrays, containers, etc. such that they can't be shared across threads due to obscure implementation
details even when it looks safe.

I think that we need a wrapper for containers that implements the shared methods required and manually locks things in order to use them. Then you apply this wrapper to any container type, and it's now a shared container.

There are also certain types of containers that lend themselves to shared access. For example, I can see a linked list where each node contains a lock being a useful type.

(For arrays, I'm referring to the appending issue, which is problematic when I try
to append to an array from multiple threads, synchronizing manually.)

I'm interested what you mean here, I tried to make sure cross-thread appending is possible.

dcollections containers would probably all fail if you tried to use them
 from multiple threads.
That being said, I'm not a huge fan of reference counting period.
Containers have no business being reference counted anyways, since their
resource is memory, and should be handled by the GC.  This doesn't mean
pieces of it shouldn't be reference counted or allocated via malloc or
whatever, but the object itself's lifetime should be managed by the GC
IMO.  Not coincidentally, this is how dcollections is set up.

I think reference counting is an elegant solution to a niche problem (namely, memory management of large containers that won't have circular references when memory is tight), but given all the baggage it creates, I don't think it should be the default for any container. I think we need to start thinking about custom
allocators, and allow reference counting but make GC the default.

The memory management of a container's innards is open to reference counting (or whatever, I agree that allocators should be supported somewhere). I just object to reference counting of the container itself, as it's not important to me whether a container gets closed outside the GC automatically.

With something like a File it's different since you are coupling closing a file (a very limited resource) with cleaning memory (a relatively abundant resource).

-Steve

Reply via email to