Confused about a thread-safe singleton example.

J

James Kanze

I bet your POSIX compliant compiler has TSD extensions.

I don't know. I just tried a really simple example, with g++
under Linux, and it failed to compile. Maybe I did something
wrong; maybe g++ requires special options to turn it on (or my
standard options turn it off); maybe it just doesn't apply to
the simple case I tried. It's certainly not standard, nor
anything I'd count on unless I had to, and portability wasn't a
concern.
Also, implementation of TSD on x86 can be as simple as
accessing the FS segment. That's pretty efficient indeed.

Loading a segment register can be pretty expensive, but I
imagine that this is only done once, during the context swap.
On the other hand, what happens if you take the address of
thread local storage, and pass it to another thread? If you
don't have to handle this case, efficient implementations should
be no problem provided the hardware supports virtual memory and
the OS collaborates. But if you don't have to support this,
you've introduced a somewhat special case---variables whose
address cannot be taken. (I see no such restriction on the
thread_local storage class in the current draft, so I suppose
that some more complex solution will be needed.)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,057
Latest member
KetoBeezACVGummies

Latest Threads

Top