
Oliver Abert:
On 29.03.2009, at 19:36, Peter Dimov wrote:
Oliver Abert:
Hi Everyone,
I am using Boost Threads (1.38) as threading library and I also use the thread_specific_ptr to store a minor amount of data per thread (I think currently it is like 5 different pointer values per thread). Technically everything works out fine, but I am having a performance problem on Mac OS X. On Linux the performance is 10 times faster than on Mac OS. If I use pthreads on Mac OS I have identical performance to the Linux version. Both versions are running on the same machine using 8 threads both.
What does your profiler say?
about 80% of the time is spend in __spin_lock which in turnwas called by pthread_once. If I use only one thread (instead of 8) the percantage goes down to 2.5% - which is still a bit much for my taste.
It looks like Mac OS's pthread_once is slower than the one in Linux. Can you provide further clues about the call stack? Where does the pthread_once call come from? This might help Anthony Williams (the maintainer of Boost.Thread) fix the performance problem by somehow avoiding the particular pthread_once call.