On 10/05/2012 04:41 AM, Jakub Jelinek wrote:
Unfortunately, that penalty is not only for thread_local vars with ctors/dtors. There is some penalty even for using extern thread_local int i; int foo (void) { return i; } (as compared to extern __thread int i;), because we have to at least check whether the weak TLS initializer for i is NULL or not. Other TU could have thread_local int i = dynamic_initialization ();
Right. This is why my patch continues to treat thread_local and __thread differently; people that don't want this overhead for exported TLS variables with static initialization can continue to use __thread.
Jason