mailing list of musl libc
 help / color / mirror / code / Atom feed
* Resuming work on new semaphore
@ 2015-04-02  1:30 Rich Felker
  2015-04-02  7:42 ` Alexander Monakov
  0 siblings, 1 reply; 20+ messages in thread
From: Rich Felker @ 2015-04-02  1:30 UTC (permalink / raw)
  To: musl

I have Alexander Monakov's new semaphore design on the agenda for this
release cycle (1.1.9). If I remember correctly, we were looking at
some issues in the last posted version with barriers and how to write
the code in a way that's both clean and avoids compiler stupidity.

One other thing I've been thinking about is how the current and new
semaphore designs differ when a waiter on a process-shared semaphore
is asynchronously killed (while waiting or during acceptance of the
post).

With the current design:

If just waiting, the waiters count remains permanently elevated (and
will eventually overflow if this happens billions of times), and any
posts will make the value positive so that another waiter can take the
post.

If accepting (at least one atomic operation on the sem already
performed) then the waiters count is left valid and either a post is
consumed or left for another waiter to take.

With the new design:

If just waiting, the negative semaphore value persists after the
waiter is killed. Subsequent posts will produce a wake for a waiter
that doesn't exist, and will thereby allow future waiters that arrive
when the semaphore value is zero to proceed immediately (leaving the
value negative) by consuming this wake. There are usage patterns where
trywait would never succeed again, but wait would succeed trivially.

If accepting, the post is consumed. Accepting only involves one atomic
operation so there is no other possibility.

It seems to me the behavior for async-kill-while-waiting is somewhat
worse with the new design, but this isn't really a usage pattern that
should have been considered "supported" before, anyway. If there are
ideas to make it better, we could explore them, but I don't think it's
a show-stopper in any case.

Rich


^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2015-04-24 15:59 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-02  1:30 Resuming work on new semaphore Rich Felker
2015-04-02  7:42 ` Alexander Monakov
2015-04-02 15:26   ` Rich Felker
2015-04-02 21:39     ` Alexander Monakov
2015-04-02 23:14       ` Rich Felker
2015-04-05 14:07         ` Alexander Monakov
2015-04-05 14:17           ` Alexander Monakov
2015-04-05 19:02             ` Rich Felker
2015-04-05 20:03               ` Alexander Monakov
2015-04-05 20:23                 ` Rich Felker
2015-04-05 21:07                   ` Alexander Monakov
2015-04-11 22:22                     ` Alexander Monakov
2015-04-23 16:06                       ` Rich Felker
2015-04-23 18:24                         ` Alexander Monakov
2015-04-23 20:01                           ` Alexander Monakov
2015-04-24  2:46                             ` Rich Felker
2015-04-24 10:23                               ` Alexander Monakov
2015-04-24 15:03                                 ` Rich Felker
2015-04-24 15:47                                 ` Alexander Monakov
2015-04-24 15:59                                   ` Rich Felker

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

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 NNTP newsgroup(s).