Re: User-space threads and NSAutoreleasePool
Re: User-space threads and NSAutoreleasePool
- Subject: Re: User-space threads and NSAutoreleasePool
- From: Michael Ash <email@hidden>
- Date: Thu, 18 Mar 2010 10:35:51 -0500
On Wed, Mar 17, 2010 at 11:11 PM, BJ Homer <email@hidden> wrote:
> Okay, so that's the setup. Obviously, the problem is that the two user-space
> threads are sharing an autorelease pool stack that is intended to be
> thread-local. My question, then, is whether there exists a way to get and
> set the autorelease pool stack, so that before calling swapcontext(), I
> could put it in a state appropriate for this user-level thread? I assume it
> is being stored in thread-local storage, but it's not in the NSThread
> threadDictionary, which means it's probably set using pthread_setspecific.
> Accessing that value would require the key used to store it, but naturally I
> don't have access to that. So is there some existing function call that
> allows such access?
I did some experimenting with this sort of thing back in the 10.4
days, using custom userspace threading code (but it should be pretty
much the same as this library call). I came to the conclusion that it
was impractical.
Cocoa keeps around a lot of thread-specific state. In addition to
autorelease pools, you also have exception handlers, graphics
contexts, and possibly others. You also have implicit thread-specific
state like runloops and various non-reentrant code that may be calling
yours when you switch to another user-level thread. And Cocoa assumes
on a pretty deep level that the only threading you're doing is
pthreads, and things built on top of pthreads like NSThread.
In short, I think you're doomed. Any code you call in your user-level
threads needs to be minimally aware of them and compatible with them
(at least to the extent of not assuming pthreads), so you can't just
call arbitrary libraries. I'm afraid Cocoa falls into that category.
Since you mention in another message that this is portable,
cross-platform code, why do you need to call Cocoa from the user-level
threads at all? Separate your code into cross-platform code that does
this swapcontext stuff, and Mac-specific code that doesn't, and you
should be good.
Mike
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden