Re: possibly OT: threadsafe libc
Re: possibly OT: threadsafe libc
- Subject: Re: possibly OT: threadsafe libc
- From: Eric Albert <email@hidden>
- Date: Mon, 21 Nov 2005 09:45:17 -0800
On Nov 21, 2005, at 7:03 AM, Philip Lukidis wrote:
Hello. I was wondering if there was a fully threadsafe libc
version which I
can use. I'll be using pthreads and was hoping there would be an
easy way
to know which libraries are threadsafe or not.
Does Apple formally specify which functions in libc are
threadsafe? I have
heard that several libc functions have a _r version, but was hoping
that
there would be a fully threadsafe library which I can link to. For
example,
sprintf does not have a _r version...does that mean I have to wrap
sprintf
calls with a mutex? I would assume not, but this would be my
intuition
speaking and not a formal written declaration by Apple on which
libraries/calls are threadsafe.
So, how to absolutely know if a libc call is threadsafe?
It's unfortunate that we haven't yet documented the thread safety of
Libc in the same way as, say, Sun does for its man pages. However,
all of Libc is threadsafe except where it's explicitly documented not
to be...and I can't think of any cases in which it's documented to
not be threadsafe. Mac OS X uses multiple threads very extensively,
so a threadsafe Libc is essentially required.
Where _r functions are available, they're provided for compatibility
or because some folks find the extra context argument useful, not
because the non-_r version is not threadsafe.
As for sprintf specifically, I wonder how anyone would implement a
non-threadsafe version. I suppose calling it with the same
destination buffer from two threads simultaneously probably wouldn't
work out well, but expecting that to produce useful results anywhere
just doesn't seem like a good idea in the first place.
-Eric
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Xcode-users mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden