This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: glibc -- ISO C11 threads Proposal


On Fri, 2014-03-28 at 01:36 -0400, Rich Felker wrote:
> FYI, glibc is currently wasting at least one slot. There's no reason
> to have separate futex and owner fields, and doing so actually
> precludes making recursive and error-checking mutexes reentrant. Since
> my implementation doesn't waste an extra slot on owner, it has enough
> slots in the 32-bit structure to store both prev/next pointers for
> robust mutexes, making them O(1) instead of O(n). This will turn out
> to be even more important for solving the tid reuse issue (where a
> mutex that was left locked by a thread that exited could be
> misinterpreted by a new thread that happens to get the same tid); as
> far as I can tell, the only reasonable solution is implementing
> recursive and error-checking mutexes internally as robust mutexes, but
> assigning them a permanent dummy owner them rather than giving
> EOWNERDEAD when they're found in "owner died" state.

If a recursive mutex is still locked by a thread when the thread exits,
this should result in undefined behavior.  I don't think tracking which
recursive mutexes a thread has acquired (in the sense of being able to
enumerate them by starting at some thread-specific variable) is
something we'd want, given the overheads that this essentially has.  And
if you don't track them, you can't prevent TID/owner reuse because
you'll eventually run out of space for where to store this.

Note that I haven't checked what POSIX says about this case (if it
does).  AFAIK, C11 leaves it unspecified (which isn't surprising given
that it tries to specify locks with just 30 lines of text...)
But IMO, locks should have a narrow contract, so that the implementation
can actually try to be efficient, and doesn't have to do error checking
or such


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]