tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Improved implementation of *env(3) functions in "libc"
On Thu, Nov 18, 2010 at 03:47:37PM +0000, Andrew Doran wrote:
> My concern with using a tree is that it makes a concurrent getenv() very
> hard to implement, and threaded programs like to make use of getenv().
1.) The reader-writer lock around the environment existed before my
changes.
2.) The tree is never used by getenv(3) or getenv_r(3). It is only
used by setenv(3), putenv(3) and unsetenv(3). The lock around
it could therefore be changed to be a mutex. But that wouldn't
solve the problem of the environment itself.
> Reader-writer locks don't scale on multi-core systems, and applications
> like this one (getenv) may give you single threaded or worse behaviour.
The data structure of the environment is fixed to be a simple unsorted
array which doesn't really allow concurrency. Unless you are willing
to accept that a program which uses *env(3) from multiple threads
needs to implement locking itself I don't think there is much else
you can do.
Kind regards
--
Matthias Scheler http://zhadum.org.uk/
Home |
Main Index |
Thread Index |
Old Index