Subject: Re: pthreads plan
To: Greg Hudson <ghudson@MIT.EDU>
From: Todd Vierling <tv@pobox.com>
List: tech-userlevel
Date: 11/06/1999 19:21:16
On Sat, 6 Nov 1999, Greg Hudson wrote:
: > Support questions or not, just tell people "set _REENTRANT... the
: > pthread man pages tell you to do so."
:
: And if they want to use a third-party library like Motif, tell them
: they're screwed?
Thread safety is much more than compiling the libraries you use with
_REENTRANT. MT-safe code requires a knowledge of function reentrancy, and
implementation of same, to work correctly.
With that said, third party libraries known to be MT-safe should be using
_REENTRANT already - and that includes packages (Hello Al & Hubert!). ;)
Libraries compiled _REENTRANT don't have to be linked against _REENTRANT
programs - it's kind of like a "compatible step up" in the compilation.
: If you're asking for the value of errno, you probably aren't in a
: performance-critical situation. getc and putc are much more worth
: worrying about.
Yes, true. Which means that these could easily be the following, assuming
my assertion about _REENTRANT and libraries above:
#define getc_unlocked(a) current_definition_of_getc
#define putc_unlocked(a) current_definition_of_getc
/*
* (note that getc_unlocked and putc_unlocked are already defined to be this
* in POSIX...)
*/
#ifdef _REENTRANT
#define getc(a) fgetc(a)
#define putc(a,b) fputc(a,b)
/* and fgetc/fputc would do proper locking in the function... */
#else
#define getc(a) getc_unlocked(a)
#define putc(a,b) putc_unlocked(a,b)
#endif
--
-- Todd Vierling (tv@pobox.com)