
Michael Glassford wrote:
Peter Dimov wrote:
However did you consider the alternative design of
void at_thread_exit( void (*pf)() );
(along the lines of atexit).
There was already an add_thread_exit() that did this; at_thread_exit is a better name, so I've just checked in the changes to use it. Functions passed to at_thread_exit() are what get called by on_thread_exit(). The dll version of Boost.Threads on Win32 calls on_thread_exit() automatically when a thread exits; in static builds of Boost.Threads, the user is responsible for calling on_thread_exit(), though hopefully this will change in a future Boost.Threads release.
Were you suggesting that at_thread_exit be publically exposed as a feature of Boost.Threads on all platforms?
I was suggesting that the DLL version of Boost.Threads should implement at_thread_exit itself. In static builds, the user would be responsible for implementing it (and we can provide a sample implementation in, say, at_thread_exit.dll). This way you won't need the dummy is_tss_implemented function; TSS use will automatically cause link errors. On the other hand, the on_thread_exit callback approach allows us to invoke it automatically from Boost.Threads-created threads. One possibility would be to retain both at_thread_exit and on_thread_exit in DLL builds, but define neither in static builds. But this will cause link errors due to the missing on_thread_exit even in programs that don't use TSS.