What I'm thinking is that, besides the TLS based solution, adding a non-standard getopt() seems to be a good option anyway, since it is a lightweight solution to this particular function.

Why do you think TLS is not lightweight.  It is very lightweight. The non-standard, non-portable approach is essentially the same computationally.

TLS is simply a little chunk of memory that lies at the "bottom" of the stack ("bottom" meaning the lowest address when the push-down stack memory was allocated).  Get the bottom of the stack and you have the TLS data.

TLS is more efficient if you can align stacks.  Then the TLS pointer can be obtained by just ANDing the current stack pointer. That is trivial.

If the stack is not aligned, then we have to ask the OS where the stack allocation begins.

Since each thread has its own stack, this provides a nearly instantaneous way to get thread-specific data.

So I would say that the complexity is higher only because this is not standard, familiar C programming, but in terms of light- vs heavy-weight, I do not see a real difference.  No decisions should be made based on that weighty-ness dimension.  The significant, important criteria are standard vs. non-standard and portable vs. non-portable.  Those matter.




Reply via email to