>> From: Steve Clamage <[EMAIL PROTECTED]>
>> To: C++ core language mailing list
>> Message c++std-core-9820
>>
>> Some compilers implement thread-local storage (TLS) for what would
>> otherwise be global variables. The compiler and runtime system
>> arrange for each thread to see its own copy of a global variable.
As I understand it, TLS on Windows is just a fancy wrapper around
a pointer. The "thread-local" slots are addressed relative to some
register that the OS sets up for each thread. So in...
extern int k;
int i = k;
...if k is thread-local, &k is an offset that must be dereferenced
with respect to the current thread. I see a fairly good analogy with
pointers to members.
extern int __thread_context::* pmk; // a TLS variable
int i = __thread->*pmk;
The only differences are that you don't need to write "__thread->*"
and that TLS variables are "pointers to references".
In implementation terms, pmk is a compile-time constant, so I think it
could be an acceptable template parameter. On the other hand, the code
required to extract the integer value is different from the code
required
to dereference a normal variable. On the third hand, compilers
supporting
TLS already face this problem when I write...
__declspec(thread) int k;
int* pk = &k;
...and I don't think being a template parameter adds anything new.
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost