From: Clinton Ebadi <clinton@unknownlamer.org>
To: Guile Development <guile-devel@gnu.org>
Cc: linasvepstas@gmail.com
Subject: Re: Locks and threads
Date: Wed, 11 Mar 2009 23:09:11 -0400 [thread overview]
Message-ID: <87ocw7igiw.fsf@unknownlamer.org> (raw)
In-Reply-To: <3ae3aa420903111829u2970b35w63b567dd2fc95752@mail.gmail.com> (Linas Vepstas's message of "Wed, 11 Mar 2009 20:29:12 -0500")
Linas Vepstas <linasvepstas@gmail.com> writes:
> An alternative idea is to try to apply some principles from
> functional programming, e.g. "copy on write" (COW): when
> the obarray needs to be updated, make a copy of it. Any
> readers in other threads continue to safely use the
> original version. When the new obarray is fully constructed,
> new readers will use it. The old obarray is garbage-collected
> in due time. I dunno if this could be applied for this case;
> at least we have garbage collection, which removes one
> major stumbling block for using COW.
If the obarray were implemented as a persistent tree instead of hash
table you wouldn't even need to copy it--the only operation that would
need to be atomic would be committing the change--swap the pointer to
the root, but only if the current root is the same as when you started
modifying the obarray; otherwise merge your changes into what is
presently the root if it changed in the meantime (alternatively, lock
around the entire insertion/replace block).
Lookup time would be increased from amortized O(1) to O(logN) and
generate a bit of garbage on every insert (depth(tree) nodes), but
minimizes potentially expensive locking (e.g. if multiple concurrent
readers are allowed while writing to the hash table you have to handle
locking everyone out when the table needs rehashing--with the persistent
tree approach readers *never* block). I suppose the best way to find out
would be to implement it, and I may do so as an experiment (it would
require modifying some C, however, which I am not so inclined to use for
a mere thought experiment).
--
Lindsay (Carlton): should i eat more post its
next prev parent reply other threads:[~2009-03-12 3:09 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-11 22:31 Locks and threads Neil Jerram
2009-02-11 23:05 ` Neil Jerram
2009-02-11 23:32 ` Ludovic Courtès
2009-02-11 23:30 ` Linas Vepstas
2009-02-11 23:53 ` Neil Jerram
2009-02-12 0:18 ` Linas Vepstas
2009-02-12 20:51 ` Ludovic Courtès
2009-02-11 23:30 ` Ludovic Courtès
2009-02-12 12:55 ` Greg Troxel
2009-02-12 18:00 ` Ken Raeburn
2009-02-12 21:14 ` Ludovic Courtès
2009-02-14 1:25 ` Ken Raeburn
2009-02-14 16:09 ` Ludovic Courtès
2009-03-05 20:41 ` Neil Jerram
2009-03-04 23:49 ` Neil Jerram
2009-03-05 3:54 ` Linas Vepstas
2009-03-05 19:46 ` Neil Jerram
2009-03-05 20:05 ` Neil Jerram
2009-03-05 20:40 ` Linas Vepstas
2009-03-05 20:49 ` Neil Jerram
2009-03-05 20:57 ` Linas Vepstas
2009-03-05 21:25 ` Neil Jerram
2009-03-05 21:56 ` Linas Vepstas
2009-03-06 11:01 ` Andy Wingo
2009-03-06 12:36 ` Linas Vepstas
2009-03-06 22:05 ` Ludovic Courtès
2009-03-08 22:04 ` Neil Jerram
2009-03-25 19:00 ` Neil Jerram
2009-03-25 22:08 ` Ludovic Courtès
2009-03-05 21:35 ` Ludovic Courtès
2009-03-10 23:57 ` Neil Jerram
2009-03-12 0:07 ` Neil Jerram
2009-03-12 0:53 ` Neil Jerram
2009-03-12 1:29 ` Linas Vepstas
2009-03-12 3:09 ` Clinton Ebadi [this message]
2009-03-25 22:13 ` Neil Jerram
2009-03-25 22:34 ` Linas Vepstas
2009-03-12 22:13 ` Andy Wingo
2009-03-13 19:13 ` Neil Jerram
2009-03-25 23:19 ` Neil Jerram
2009-03-26 3:40 ` Linas Vepstas
2009-03-26 8:02 ` Neil Jerram
2009-03-26 18:39 ` Linas Vepstas
2009-03-26 9:10 ` Ludovic Courtès
2009-03-26 22:01 ` Neil Jerram
2009-03-26 23:12 ` Ludovic Courtès
2009-03-26 22:51 ` Neil Jerram
2009-03-27 3:15 ` Linas Vepstas
2009-03-14 14:23 ` Ludovic Courtès
2009-03-16 22:57 ` Andy Wingo
2009-03-25 18:57 ` Neil Jerram
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87ocw7igiw.fsf@unknownlamer.org \
--to=clinton@unknownlamer.org \
--cc=guile-devel@gnu.org \
--cc=linasvepstas@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).