This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: Dummy pthread functions in libc considered harmful
- From: OndÅej BÃlka <neleai at seznam dot cz>
- To: Andreas Schwab <schwab at suse dot de>
- Cc: Carlos O'Donell <carlos at redhat dot com>, Florian Weimer <fweimer at redhat dot com>, Samuel Thibault <samuel dot thibault at ens-lyon dot org>, Rich Felker <dalias at libc dot org>, libc-alpha at sourceware dot org
- Date: Thu, 3 Sep 2015 20:45:36 +0200
- Subject: Re: Dummy pthread functions in libc considered harmful
- Authentication-results: sourceware.org; auth=none
- References: <mvmr3ms4sbj dot fsf at hawking dot suse dot de> <20150824153816 dot GC3210 at type dot bordeaux dot inria dot fr> <20150824162250 dot GD32742 at brightrain dot aerifal dot cx> <20150824162641 dot GH3210 at type dot bordeaux dot inria dot fr> <mvmbndv4zeh dot fsf at hawking dot suse dot de> <55DC1700 dot 6060905 at redhat dot com> <55E74931 dot 3070509 at redhat dot com> <mvm613st1o9 dot fsf at hawking dot suse dot de>
On Thu, Sep 03, 2015 at 09:14:14AM +0200, Andreas Schwab wrote:
> "Carlos O'Donell" <carlos@redhat.com> writes:
>
> > Is there ever a safe way to transition from running unthreaded to
> > threaded if you are not using a full implementation of locks in libc.so?
>
> As long as you have no "locked" mutexes while libpthread is being loaded
> (which installs the real pthread_mutex functions), there is no danger,
> since you cannot create new threads without libpthread being fully
> active.
>
A requirement for no locked mutex isn't necessary. It simplifies things
as with it a functions could be nop.
It would definitely be possible to write single thread locks that
consistently setup structure, but it wouldn't be wise. It would make
harder mainainance of two different implementations.
Instead we should add single-thread path to locks and atomics.
Now when I looked assembly optimization we do leaves lot to be desired,
as we need branch for each operation. Instead we could branch only once
for each function to single and multithread versions.