https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99613

--- Comment #8 from Michal Zientkiewicz <michalz at nvidia dot com> ---
Jakub: You read coorectly, I was checking for global construction/destruction
order of many variables. I agree that a global lock is a heavy-handed solution
- and likely the only one that would always guarantee destruction order.

The example I posted is not very useful - the variables are independent. There
are cases where moving atexit would help:

Thread A                   Thread B
acquire lock on S1
initialize S1
release lock on S1

                           acquire lock on S2
                           initialize S2, which depends on S1
                           S1 is seen as initialized -> proceed
                           release lock on S2
                           atexit destroy S2
atexit destroy S1

Now we have reversed destruction order on _dependent_ variables and moving
atexit inside the per-variable lock scope would fix the issue.

Reply via email to