[Python-Dev] Threading and callbacks - missing documentation

Tim Peters tim.one@comcast.net
Fri, 12 Apr 2002 14:21:17 -0400


[Tim]
> ... I believe Mark Hammond has a general set of C++
> classes to help with this stuff on Windows, but IIRC
> they rely on Windows-specific TLS (thread local
> storage) gimmicks.

[Gordon McMillan]
> No TLS. Mark's stuff actually relies on being
> called (at some point) with the GIL so he can
> grab the interpreter- and thread-states.

Yes TLS, and all over the place.  Look at the code for any of
PyWinThreadState_Ensure, PyWinInterpreterLock_Acquire,
PyWinInterpreterLock_Release, PyWinThreadState_Free, PyWinThreadState_Clear
or DLLMAIN.  TLS is used to remember what a thread's PyThreadState is, and
to determine whether a thread already has a PyThreadState (it does iff the
TLS slot at dwTlsIndex is non-NULL).  Simple example:

// Asuming we have a valid thread state, acquire the Python lock.
void PyWinInterpreterLock_Acquire()
{
	ThreadData *pData = (ThreadData *)TlsGetValue(dwTlsIndex);
	PyThreadState *thisThreadState = pData->ts;
	PyEval_AcquireThread(thisThreadState);
}